Spring Security 6中不再允许“/**/*.js”模式

vojdkbi0  于 2023-10-20  发布在  Spring
关注(0)|答案(2)|浏览(109)

我重构了这段代码,它在Sping Boot 2.7中运行良好

@Override
protected void configure(HttpSecurity http) throws Exception {

    http.csrf().ignoringAntMatchers("/api/**").and()
        .authorizeRequests()
        .antMatchers(
    "/",
                "/_admin/**",
                "/swagger-ui.html*",
                "/swagger-resources/**",
                "/webjars/springfox-swagger-ui/**",
                "/swagger-resources",
                "/api-docs/**",
                "/api/**",
                "/login",
                "/login/**",
                "/oauth2/**",
                "/static/**",
                "/404",
                "/405",
                "/favicon.ico",
                "/**/*.png",
                "/**/*.gif",
                "/**/*.svg",
                "/**/*.jpg",
                "/**/*.html",
                "/**/*.css",
                "/**/*.js")
        .permitAll()
        .antMatchers("/ui/**")
        .authenticated()
        .and()
        .oauth2Login();

    http.headers().httpStrictTransportSecurity().maxAgeInSeconds(0);
}

这是:

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {

    http.csrf().ignoringRequestMatchers("/api/**").and()
            .authorizeHttpRequests(authorize -> authorize.shouldFilterAllDispatcherTypes(true).dispatcherTypeMatchers(DispatcherType.FORWARD).permitAll().requestMatchers("/",
                    "/api/v1/links/**",
                    "/_admin/**",
                    "/swagger-ui.html*",
                    "/swagger-resources/**",
                    "/webjars/springfox-swagger-ui/**",
                    "/swagger-resources",
                    "/api-docs/**",
                    "/api/**",
                    "/login",
                    "/login/**",
                    "/oauth2/**",
                    "/static/**",
                    "/404",
                    "/405",
                    "/favicon.ico",
                    "/demoLink/**",
                    "/DemoLink/**",
                    "/templateLink/**",
                    "/**/*.png",
                    "/**/*.gif",
                    "/**/*.svg",
                    "/**/*.jpg",
                    "/**/*.html",
                    "/**/*.css",
                    "/**/*.js"
                    ).permitAll().anyRequest().authenticated())
            .oauth2Login();

    http.headers().httpStrictTransportSecurity().maxAgeInSeconds(0);

    return http.build();
}

但我得到了**PatternParse没有更多的模式. *
我正在迁移到Sping Boot 3,但是/**/*.x不再被允许的问题导致了一些重定向需要进行身份验证。我搜索了很多,但找不到新的Spring Security中/**/*.x模式的替代品。

**编辑:**我不拥有.js资源。我在服务进行某种重定向时接收到它们,因此我无法预测特定的模式。

cnwbcb6i

cnwbcb6i1#

我问了ChatGPT,得到了这个:
在Spring Security 5.5+(包括Sping Boot 3.x版本)中,在模式(如//*.js)中使用带文件扩展名的双星号()由于其实现和解释的问题而被弃用。
使用显式路径:如果您将JavaScript文件放在/js/下,CSS文件放在/css/下,则可以使用/js/**或/css/等模式,而不是//*.js
也许你得稍微调整一下。

mwngjboj

mwngjboj2#

您可以实现自定义的身份验证过滤器,从而在请求进入实际的过滤器之前拦截它。在那里,您可以检查您的条件并自己验证请求。

@Component
@AllArgsConstructor
public class JwtAuthenticationFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response,
            @NonNull FilterChain filterChain) throws ServletException, IOException {

        if ([your condition])) {
            UsernamePasswordAuthenticationToken authentication = new 
            UsernamePasswordAuthenticationToken(username, null, null);       
            SecurityContextHolder.getContext()
            .setAuthentication(authentication);
        
        }
        filterChain.doFilter(request, response); //send it to the filter.
    }
}

你还必须在其他类的过滤器链中添加这个:

.addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class)

相关问题