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"));
}

}