此问题在此处已有答案:
Spring Security : Multiple HTTP Config not working(2个答案)
三个月前关门了。
我在配置多个httpSecurities
时遇到问题。
我有一些用JWT标记保护的api路由。
我希望我的swagger-ui/index.html
路由使用基本身份验证进行保护。
我希望即使在使用基本身份验证对用户进行身份验证之后,这些API路由仍然受到JWT标记的保护。
我按照此文档创建了多个SecurityFilterChain
我的问题是无论哪个FilterChain
有@Order(1)
的作品和其他FilterChain
是完全忽略。
(if filterChain
具有订单1,产品和订单的路由受到保护,但swagger-ui/index.html
不受基本身份验证的保护)
下面是我的实现。
@Bean
@Order(1)
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authenticationProvider(authenticationProvider());
http
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http
.cors()
.and()
.csrf().disable();
http
.authorizeRequests()
.antMatchers(HttpMethod.GET, "/api/products").hasRole("ADMIN")
.antMatchers(HttpMethod.PUT, "/api/orders").hasRole("ADMIN")
.antMatchers("/api/**").permitAll();
http
.addFilter(new JWTAuthenticationFilter(secret, authenticationManager(authConfig)));
http
.addFilterBefore(new JWTAuthorizationFilter(secret), UsernamePasswordAuthenticationFilter.class);
return http.build();
}
@Bean
public SecurityFilterChain swaggerFilterChain(HttpSecurity http) throws Exception {
http
.authenticationProvider(authenticationProvider());
http
.requestMatchers()
.and()
.authorizeRequests()
.antMatchers("/swagger-ui/index.html","/v3/api-docs/","/v3/api-docs")
.authenticated()
.and()
.httpBasic();
return http.build();
}
2条答案
按热度按时间tvmytwxo1#
您应该至少在其中一个筛选器中使用
HttpSecurity
的下列方法之一:一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月一个月
这将帮助您将某些
HttpSecurity
配置为仅在匹配提供的模式时调用。您已经使用了第二个过滤器中的最后一个方法,但是没有向配置器提供任何匹配器。
因此,尝试将第二个filterChain重写为:
还要注意的是,如果你不想在其他过滤器链中对所有其他端点的url进行硬编码,那么你的
swaggerFilterChain
可能会首先被调用--如果一个请求与一个过滤器匹配,那么它将是唯一要应用的过滤器,所以其他的过滤器将被忽略。因此,您还需要更改顺序-将
@Order(1)
放置为您的swaggerFilterChain
,并从其他过滤器链中删除此注解。r55awzrz2#
试试这个,把
.antMatchers("/api/**")
移到文档的开头