spring-security - 多个 WebSecurityConfigurerAdapter 冲突问题

标签 spring-security filter

我正在构建一个需要处理两种类型身份验证的应用程序,所以我这样做了

@Autowired
UserService userService;

@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {
    // Md5PasswordEncoder encoder = new Md5PasswordEncoder();
    auth.userDetailsService(userDetailsService());// .passwordEncoder(encoder);
}

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/api/**");
}

@Override
protected void configure(HttpSecurity http) throws Exception {

    http.authorizeRequests().antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')").and().formLogin()
            .loginPage("/login").usernameParameter("username").passwordParameter("password").and()
            .exceptionHandling().accessDeniedPage("/access_denied").and().csrf().disable();
}

@Override
protected UserDetailsService userDetailsService() {
    return (UserDetailsService) userService;
}

@Configuration
@EnableGlobalMethodSecurity(securedEnabled = true)
@Order(Ordered.LOWEST_PRECEDENCE)
public static class ApiSecurityConfiguration extends WebSecurityConfigurerAdapter {

    AuthenticationTokenFilter authenticationTokenFilter;

    @Autowired
    CustomAuthenticationEntryPoint customAuthenticationEntryPoint;

    @Autowired
    TokenUtils tokenUtils;

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        authenticationTokenFilter = new AuthenticationTokenFilter(authenticationManager(), tokenUtils);

        http.csrf().disable().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
                .authorizeRequests()//.antMatchers("/api/authenticate", "/admin/**").permitAll()
                .antMatchers("/api/**").authenticated().and()
                .addFilterBefore(authenticationTokenFilter, AnonymousAuthenticationFilter.class).httpBasic()
                .authenticationEntryPoint(customAuthenticationEntryPoint);
    }
}

如果我使用 @Order(Ordered.HIGHEST_PRECEDENCE) ApiSecurityConfiguration 完美运行并且第一个配置被错过,
如果我将它切换到 @Order(Ordered.LOWEST_PRECEDENCE),第一个完美运行并且 ApiSecurityConfiguration 被遗漏,甚至添加的过滤器也不再激活,我认为它们会相互冲突并且禁用另一个,有什么建议吗?

最佳答案

您必须更改两种配置的 antMatcher,我的意思是在两种配置中 antMatcher url 必须是唯一的。如果你写了不同的 antMatcher urls 那么你的问题应该得到解决

关于spring-security - 多个 WebSecurityConfigurerAdapter 冲突问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35134032/

相关文章:

java - 使用注释配置时在 Spring 3 中实现 HTTP Basic auth 弹出窗口的最简单方法

java - Spring Security如何处理Spring Boot中的所有模块

java - AngularJS 的 Spring 安全性 - 注销不起作用

elasticsearch - ElasticSearch不过滤

HTML5 拖放 - 在 Safari 中检测文件夹(FileList、File)

java - Spring OAuth2 不提供刷新 token

spring - MonitorFilter::WARNING:监控过滤器必须是链中的第一个过滤器

javascript - 基于数组过滤对象的属性。并获取过滤后的对象

spring - 在 Spring 集成测试中未注入(inject)自定义过滤器

javascript - Angular 日期过滤器不适用于双向数据绑定(bind)