禁用特定子路径上的BasicAuth

时间:2016-03-14 18:31:57

标签: java spring spring-security spring-boot basic-authentication

我知道stackoverflow上有一些问题,但没有任何帮助......

http
            .addFilterBefore(RestConfiguration.getCorsFilter(), ChannelProcessingFilter.class)
            .authorizeRequests() //Authorize Request Configuration
            .antMatchers("/api/**").hasRole("API")
            .antMatchers("/api/confirm/**").permitAll()
            .antMatchers("/api/version").permitAll()
            .anyRequest().authenticated()
            .and() //HTTP basic Authentication only for API
            .antMatcher("/api/**").httpBasic()
            .and() // angularjs requires csrf
            .addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class)
            .csrf().disable();

我有一些带有子路径的api路径。但我希望在没有基本身份验证(confirm/**version)的情况下访问其中两个。

我该怎么做?我总是得到登录对话框。

1 个答案:

答案 0 :(得分:0)

您应该在antMatchers("/api/**").hasRole("API")/api/confirm/**之后使用/api/version规则。目前的订购不太正确:

.antMatchers("/api/confirm/**").permitAll()
.antMatchers("/api/version").permitAll()
.antMatchers("/api/**").hasRole("API")

总而言之,如果您只想保护/api/*并允许公开访问/api/confirm/**/api/version以及所有其他没有api前缀的路径,那么您应该拥有HttpSecurity配置如下:

http
        // Same as before
        .httpBasic()
        .and()
        .authorizeRequests()
            .antMatchers("/api/confirm/**").permitAll()
            .antMatchers("/api/version").permitAll()
            .antMatchers("/api/**").hasRole("API")
            .anyRequest().permitAll();
        // Same as before