Spring rest api 绕过认证
Spring rest api by-passing authentication
我有一个名为 "abc" 的模块,它具有用于用户身份验证的安全功能
并且用户名和密码已通过 ldap 服务器进行身份验证
<authentication-manager alias="authenticationManager" erase-credentials="false">
<authentication-provider ref="preAuthenticatedLdapAuthenticationProvider" />
<ldap-server id="ldapServerIDGreenBus" url="${ldap.URL}/${ldap.Base}"
manager-dn="${ldap.Username}" manager-password="${ldap.Password}" />
我正在为所有具有任何角色的用户拦截 url 模式。
问题:我有一个忘记密码服务内置于此模块中,它是在用户登录之前因此没有定义角色我只接收用户的电子邮件,以便我可以更改密码并将其发送到用户的主要地址。
因此,我尝试了两件事
1.<intercept-url pattern="/forgotPassword" access="permitAll"/>
结果:失败,因为 permitAll 确实进行了身份验证,但它允许所有模式,前提是它们必须具有身份验证对象(用户名和密码)。
2. <http pattern="/forgotPassword" security="none" />
结果: 失败并检查邮递员,它显示了这个
您可以在 SecurityConfig 文件中定义权限,也可以使用可重写的 'configure' 方法。我会尝试这样的事情。我在下面添加了 'forgotPassword' url 匹配项。
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authProvider);
}
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/forgotPassword/**").permitAll()
.antMatchers("/**").hasRole("USER")
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.successForwardUrl("/loginSuccess")
.failureUrl("/loginError")
.permitAll()
.and()
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"));
}
}
我有一个名为 "abc" 的模块,它具有用于用户身份验证的安全功能
并且用户名和密码已通过 ldap 服务器进行身份验证
<authentication-manager alias="authenticationManager" erase-credentials="false">
<authentication-provider ref="preAuthenticatedLdapAuthenticationProvider" />
<ldap-server id="ldapServerIDGreenBus" url="${ldap.URL}/${ldap.Base}"
manager-dn="${ldap.Username}" manager-password="${ldap.Password}" />
我正在为所有具有任何角色的用户拦截 url 模式。
问题:我有一个忘记密码服务内置于此模块中,它是在用户登录之前因此没有定义角色我只接收用户的电子邮件,以便我可以更改密码并将其发送到用户的主要地址。
因此,我尝试了两件事
1.<intercept-url pattern="/forgotPassword" access="permitAll"/>
结果:失败,因为 permitAll 确实进行了身份验证,但它允许所有模式,前提是它们必须具有身份验证对象(用户名和密码)。
2. <http pattern="/forgotPassword" security="none" />
结果: 失败并检查邮递员,它显示了这个
您可以在 SecurityConfig 文件中定义权限,也可以使用可重写的 'configure' 方法。我会尝试这样的事情。我在下面添加了 'forgotPassword' url 匹配项。
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authProvider);
}
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/forgotPassword/**").permitAll()
.antMatchers("/**").hasRole("USER")
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.successForwardUrl("/loginSuccess")
.failureUrl("/loginError")
.permitAll()
.and()
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"));
}
}