如何向HttpSecurity添加自定义过滤器并检索用户? (春季安全)

时间:2018-06-15 06:14:32

标签: java spring spring-security

WebSecurityConfigurerAdapter类中,我们有protected void configure(HttpSecurity http)方法,我们在其中添加了对请求的限制。我想要的是:

1.检索想要输入
的用户 2.检查该用户是否在db中 3.检查该用户是否有特殊的属性,例如:login.endsWith('_login')

1 个答案:

答案 0 :(得分:3)

您需要实现Custom AuthenticationProvider。根据需要由其他服务器执行身份验证代码。

@Component
public class CustomAuthenticationProvider
  implements AuthenticationProvider {

    @Override
    public Authentication authenticate(Authentication authentication) 
      throws AuthenticationException {

        String name = authentication.getName();
        String password = authentication.getCredentials().toString();

        if (shouldAuthenticateAgainstThirdPartySystem()) {

            // use the credentials
            // and authenticate against the third-party system
            return new UsernamePasswordAuthenticationToken(
              name, password, new ArrayList<>());
        } else {
            return null;
        }
    }

    @Override
    public boolean supports(Class<?> authentication) {
        return authentication.equals(
          UsernamePasswordAuthenticationToken.class);
    }
}

注册您的身份验证提供程序。

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private CustomAuthenticationProvider authProvider;

    @Override
    protected void configure(
      AuthenticationManagerBuilder auth) throws Exception {

        auth.authenticationProvider(authProvider);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().authenticated()
            .and()
            .httpBasic();
    }
}
  

注意:我假设您正在使用HTTP基本身份验证,您可以   将其更改为FormLogin或根据您的需要。