我想允许在特定控制器中定义的所有网址除外。
让我们说我的控制器使用基本网址公开3个网址/users
我想允许访问除最后一个用户之外的任何用户的1和2个网址。
我一直在做这样的事情
@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
http.authorizeExchange()
.pathMatchers("/users/**")
.permitAll()
.pathMatchers("/users/admin")
.hasRole("ADMIN")
.anyExchange()
.authenticated()
.and()
.httpBasic()
.and()
.formLogin();
return http.build();
}
但它不起作用。我也尝试了反过来,即
@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
http.authorizeExchange()
.pathMatchers("/users/admin")
.hasRole("ADMIN")
.anyExchange()
.authenticated()
.pathMatchers("/users/**")
.permitAll()
.and()
.httpBasic()
.and()
.formLogin();
return http.build();
}
这也无效,因为anyExchange()
已经注册了pathMatcher
,因此无法联系到firstlist = firstlist*2
。
答案 0 :(得分:1)
我找到了解决方案。
anyExchange()
和authenticated()
导致了此问题。 anyExchange()
不允许进一步添加任何路径匹配器,authenticated()
使整个应用程序受到保护,导致每个URL提示进行身份验证。
删除这两个工作。
@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
http.authorizeExchange()
.pathMatchers("/users/admin/**")
.hasRole("ADMIN")
.pathMatchers("/**").permitAll()
.and().httpBasic();
return http.build();
}