Spring Security oauth并关闭一些网址的安全性,但保持基本身份验证激活

时间:2016-06-30 12:52:10

标签: java spring security spring-security

我有一个工作弹簧安全oauth2的项目。

HttpSecurity Config如下所示:

http.antMatcher("/**").authorizeRequests().antMatchers(RESOURCE_LOCATIONS).permitAll().and()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER)
            .and().httpBasic().disable()
            .authorizeRequests().anyRequest().authenticated();

通过此设置,除了RESOURCE_LOCATIONS下面的URL之外的任何请求都由ouath2协议保护。对于这些请求,HTTP Basic已关闭。

现在我想让/ internal / **下面的网址受到保护,但只能通过HTTP Basic身份验证。

我正在尝试这样或类似的方法:

http.antMatcher("/**").authorizeRequests().antMatchers(RESOURCE_LOCATIONS).permitAll().and()
            .antMatcher("/internal/**").httpBasic().and() //<--ADDED THIS LINE
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER)
            .and().httpBasic().disable()
            .authorizeRequests().anyRequest().authenticated();

但令人惊讶的是,所有请求都是公开的,没有基本身份验证。

有人有提示要解决这个问题吗?

BR, 迈克尔

1 个答案:

答案 0 :(得分:1)

那么,

如果你想让url / internal / **得到保护,那么更好的形式是hasRole('')和httpBasic。您的应用程序需要通过简单的HTTP基本身份验证进行身份验证。但是其他网页不应该使用HTTP basic,而应该使用普通的表单登录。所以你可以创建一个WebSecurity,只是为了url'Internal',如下所示。我希望这可以帮到你!

@Configuration
@Order(1)
public static class InternalWebSecurityConfig extends WebSecurityConfigurerAdapter{
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
                .antMatcher("/internal/**")
                .authorizeRequests()
                    .anyRequest().hasAnyRole("ADMIN", "USER")
                    .and()
                .httpBasic();
    }
}