正在努力使用新的Spring Security 6.x。具有以下SecuritsFilterChain
:
@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class SecurityConfiguration {
public SecurityConfiguration() {}
@Bean
@Order(1)
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(authorize -> authorize
.requestMatchers("/swagger-ui/**", "/swagger-ui/index.html**", "/swagger-ui/index.html/**", "/v3/api-docs/**").permitAll()
.anyRequest().authenticated()
.and()
.addFilterAfter(new JWTAuthorizationFilter(), BasicAuthenticationFilter.class));
return http.build();
}
很遗憾,URL:
/swagger-ui/index.html
执行不应该执行的过滤器JWTAuthorizationFilter
。没有过滤器,它可以工作。
1条答案
按热度按时间kcwpcxri1#
首先,请允许我为可读性提出一些修改建议,然后我将在此之后进行评论:
这样做的好处是,将授权规则与正在配置的其余过滤器分开查看会更容易一些。
允许全部
每个请求都调用身份验证筛选器。
permitAll()
、authenticated()
和hasRole()
都与AuthorizationFilter
一起工作,AuthorizationFilter
被放置在过滤器链中的认证过滤器之后。这意味着
JWTAuthorizationFilter
、BasicAuthenticationFilter
和所有身份验证过滤器不受您添加的任何授权规则的影响。如果存在
JWTAuthorizationFilter
应该跳过的某些请求,则由该过滤器来决定。