Spring rest api旁路认证

时间:2018-05-17 04:39:41

标签: spring-boot spring-security spring-ldap spring-security-ldap

我有一个名为" 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}" />

我正在拦截所有有角色的用户的网址格式。

问题:我在此模块中内置了忘记密码服务,该模块位于用户登录之前,因此未定义任何角色,我只接收来自用户的电子邮件这样我就可以更改密码并将其发送到用户的主要地址。

因此,我尝试了两件事

1。 <intercept-url pattern="/forgotPassword" access="permitAll"/>

结果:失败,因为permitAll会进行身份验证但它允许所有模式,前提是他们必须拥有身份验证对象(用户名和密码)。

2。 <http pattern="/forgotPassword" security="none" />

结果:邮递员失败并检查,结果显示

securityAuthError

1 个答案:

答案 0 :(得分:1)

您可以在SecurityConfig文件中定义权限,也可以使用可覆盖的&#39;配置&#39;方法。我会尝试这样的事情。我添加了&#39; forgotPassword&#39;网址匹配如下。

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

}