我有一个工作弹簧安全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, 迈克尔
答案 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();
}
}