何时使用Spring Security的antMatcher()?
什么时候使用antMatcher()
vs antMatchers()
?
例如:
http .antMatcher("/high_level_url_A/**")
.authorizeRequests()
.antMatchers("/high_level_url_A/sub_level_1").hasRole('USER')
.antMatchers("/high_level_url_A/sub_level_2").hasRole('USER2')
.somethingElse()
.anyRequest().authenticated()
.and()
.antMatcher("/high_level_url_B/**")
.authorizeRequests()
.antMatchers("/high_level_url_B/sub_level_1").permitAll()
.antMatchers("/high_level_url_B/sub_level_2").hasRole('USER3')
.somethingElse()
.anyRequest().authenticated()
.and()
...
我期望的是
- 任何
/high_level_url_A/**
与之匹配的请求都应通过身份验证+/high_level_url_A/sub_level_1
仅针对USER和/high_level_url_A/sub_level_2
USER2 - 任何
/high_level_url_B/**
与之匹配的请求都应经过身份验证+,/high_level_url_B/sub_level_1
以供公共访问,并且/high_level_url_A/sub_level_2
仅适用于USER3。 - 我不在乎其他任何模式-但应该公开吗?
我看到最近的例子不包括antMatcher()
这些天。这是为什么?是否antMatcher()
不再需要?
回答:
您需要antMatcher
多个HttpSecurity
,请参阅SpringSecurity Reference:
我们可以配置多个HttpSecurity实例,就像我们可以拥有多个<http>
块一样。关键是要WebSecurityConfigurationAdapter
多次扩展。例如,以下是对以开头的URL具有不同配置的示例/api/
。
@EnableWebSecurity public class MultiHttpSecurityConfig {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) { 1
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER").and()
.withUser("admin").password("password").roles("USER",
"ADMIN");
}
@Configuration
@Order(1) 2
public static class ApiWebSecurityConfigurationAdapter extends
WebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/api/**") 3
.authorizeRequests()
.anyRequest().hasRole("ADMIN")
.and()
.httpBasic();
}
}
@Configuration 4
public static class FormLoginWebSecurityConfigurerAdapter extends
WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin();
}
}
}
1正常配置身份验证
2创建一个WebSecurityConfigurerAdapter
包含的实例,@Order
以指定WebSecurityConfigurerAdapter
应首先考虑的对象。
3 http.antMatcher
指出这HttpSecurity
仅适用于以开头的URL/api/
4创建的另一个实例WebSecurityConfigurerAdapter
。如果URL不以/api/
该配置开头,则将使用此配置。以后考虑此配置,ApiWebSecurityConfigurationAdapter
因为它的@Order
值是after
1
(没有@Order
默认值是last)。
在您的情况下,您不需要antMatcher
,因为您只有一种配置。您修改的代码:
http .authorizeRequests()
.antMatchers("/high_level_url_A/sub_level_1").hasRole('USER')
.antMatchers("/high_level_url_A/sub_level_2").hasRole('USER2')
.somethingElse() // for /high_level_url_A/**
.antMatchers("/high_level_url_A/**").authenticated()
.antMatchers("/high_level_url_B/sub_level_1").permitAll()
.antMatchers("/high_level_url_B/sub_level_2").hasRole('USER3')
.somethingElse() // for /high_level_url_B/**
.antMatchers("/high_level_url_B/**").authenticated()
.anyRequest().permitAll()
以上是 何时使用Spring Security的antMatcher()? 的全部内容, 来源链接: utcz.com/qa/427943.html