Spring Security 5.x 配置ignoring不生效问题(已解决)

文章讲述了如何在SpringSecurity中,为了避免自定义过滤器拦截到指定为`ignore`的路径,需要移除自定义过滤器的@Component注解,以new方式添加到过滤器链,并在SecurityConfig中正确配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

在webSecurity中忽略路径,但是仍然会被Spring Security过滤器拦截到。
解决方案是不要将自定义过滤器交给Spring管理,也就是移除自定义过滤器的@Component的注解,并且将自定义过滤器以new的方式手动传入过滤器链中,这时候ignoring配置的路径就生效了。

解决方案

// JwtAuthenticationFilter.java
public class JwtAuthenticationFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, @NonNull HttpServletResponse response, @NonNull FilterChain filterChain) throws ServletException, IOException {
		// ...自定过滤器逻辑
	}
}



// SecurityConfig.java
@Configuration
@RequiredArgsConstructor
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig {

    private final CustomAuthenticationEntryPoint customAuthenticationEntryPoint;
    private final CustomAccessDeniedHandler customAccessDeniedHandler;

    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        return http
                .csrf().disable()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
                .authorizeRequests(authorize -> authorize
                        .antMatchers("/login/**").permitAll()
                        .anyRequest().authenticated()
                )
                // 配置自定义过滤器为手动创建的方式传入
                .addFilterBefore(new JwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
                .build();
    }
	
    @Bean
    public WebSecurityCustomizer webSecurity(){
        return web -> web.ignoring().antMatchers("/login/**");
    }

}

<think>好的,用户问的是Swagger配置不生效问题。我需要先回想一下常见的Swagger配置问题可能有哪些。首先,用户可能没有正确添加依赖,比如在Spring Boot项目中,可能漏掉了springfox-boot-starter或者版本不兼容。接着,配置类的问题,比如是否使用了@EnableSwagger2或@EnableSwagger2WebMvc,或者配置类没有被扫描到。另外,Spring Security的拦截也可能导致Swagger的页面或接口被拦截,需要放行相关路径。还有路径匹配的问题,比如Spring Boot 2.6及以上版本处理路径匹配的方式不同,可能需要调整。资源处理的问题,比如静态资源没有被正确加载,可能需要添加资源处理器。最后,缓存或浏览器问题也可能导致页面无法加载,需要清除缓存或者尝试无痕模式。 接下来,我需要整理这些可能的原因,并给出对应的解决方案。要分步骤说明,让用户能够逐步排查。可能还需要提醒用户检查日志是否有错误信息,确认配置类是否正确加载,以及检查依赖版本是否兼容。另外,要给出示例代码,比如正确的配置类写法,Spring Security的放行配置,路径匹配策略的调整方法,资源处理器的添加等。同时,要提醒用户注意版本差异,尤其是Spring Boot 2.6及以上版本的问题。最后,建议用户如果问题依旧存在,提供更多上下文信息以便进一步排查。 需要注意使用中文,结构清晰,避免使用专业术语过多,尽量用易懂的语言解释。同时,按照系统级指令,数学公式要用$...$,但这个问题可能不涉及数学公式,所以可能不需要。但如果有涉及的话,要确保格式正确。不过当前问题主要是配置问题,可能不需要数学表达式。总之,重点放在分步骤排查和解决方案上,帮助用户逐步解决问题。</think>Swagger 配置不生效的常见原因及解决方案如下: --- ### 一、依赖未正确引入 1. **Maven 项目检查依赖** ```xml <!-- SpringFox 3.x 版本 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency> ``` - 确认版本与 Spring Boot 兼容(Spring Boot 2.6+ 需使用 SpringFox 3.x) - 避免与其他文档工具(如 SpringDoc)冲突 2. **Gradle 项目检查依赖** ```groovy implementation 'io.springfox:springfox-boot-starter:3.0.0' ``` --- ### 二、配置类未生效 1. **检查配置类注解** ```java @Configuration @EnableSwagger2 // SpringFox 2.x 需要此注解 // 或 @EnableSwagger2WebMvc // SpringFox 3.x 需要此注解 public class SwaggerConfig { // Docket 配置 } ``` - 确保配置类在组件扫描路径内 2. **验证 Docket Bean** ```java @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.basePackage("com.example.controller")) .paths(PathSelectors.any()) .build(); } ``` --- ### 三、Spring Security 拦截 1. **放行 Swagger 相关路径** ```java @Override public void configure(WebSecurity web) { web.ignoring().antMatchers( "/v2/api-docs", "/swagger-resources/**", "/swagger-ui/**", "/webjars/**" ); } ``` --- ### 四、路径匹配策略冲突(Spring Boot 2.6+) 1. **调整 `application.properties`** ```properties # 解决 PathPattern 匹配问题 spring.mvc.pathmatch.matching-strategy=ant_path_matcher ``` --- ### 五、静态资源未加载 1. **添加资源处理器** ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/swagger-ui/**") .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/"); } } ``` --- ### 六、验证步骤 1. 访问 `http://localhost:8080/swagger-ui/` 或 `http://localhost:8080/swagger-ui/index.html` 2. 检查控制台日志是否有 `Springfox` 初始化信息 3. 使用 Postman 调用 `/v2/api-docs` 验证 JSON 是否生成 --- ### 七、常见错误示例 - **404 页面未找到**:依赖缺失或路径被拦截 - **空白页面**:静态资源未加载或浏览器缓存问题 - **文档无接口**:`basePackage` 配置错误或 Controller 未被扫描 若问题仍未解决,请提供: 1. 完整的 `pom.xml` 或 `build.gradle` 2. Swagger 配置类代码 3. Spring Boot 版本信息 4. 控制台错误日志片段 这将帮助更精准定位问题
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值