UserDetailsChecker实现重写isAccountNotLocked方法

时间:2019-02-21 16:35:50

标签: spring-security

我正在使用UserDetails实现进行身份验证,其中包含方法

@Override
public boolean isAccountNonExpired() {
    return true;
}

@Override
public boolean isAccountNonLocked() {
    return true;
}

@Override
public boolean isCredentialsNonExpired() {
    return true;
}

@Override
public boolean isEnabled() {
    return true;
}

如果我将isAccountNonLocked()设置为false,则无法登录。 我如何实现自己的UserDetailsChecker来覆盖检查时抛出的异常以及将自定义UserDetailsChecker放在哪里,因为我不确定这种预身份验证检查的工作方式。

1 个答案:

答案 0 :(得分:0)

如果您有自定义的UserDetailsChecker,则可以在配置AuthenticationManager时将其连接起来:

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(dao());
    }

    AuthenticationProvider dao() {
         DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
         provider.setPreAuthenticationChecks(new MyUserDetailsChecker());
         return provider;
    }

    @Bean
    public UserDetailsService userDetailsService() {
        // ... expose a UserDetailsService
    }
}

请注意,您可能已经以另一种方式发布了UserDetailsService,但我在此处包含了此信息,以提醒身份验证提供程序才能使用它。