You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Security中permitAll不生效,如何正确放行/actuator/**端点?

问题根源

从调试日志和报错信息可以看出:你配置的JwtTokenAuthenticationFilter会拦截所有请求,包括已经通过permitAll()放行的/actuator路径。由于该过滤器在AuthorizationFilter(权限校验过滤器)之前执行,还没到权限判断环节就触发了token校验逻辑,抛出了Invalid token异常,导致/actuator/info请求被拦截。

解决方法

方法1:修改Jwt过滤器,跳过actuator路径校验

在自定义的JwtTokenAuthenticationFilter的doFilterInternal方法开头添加路径判断,直接放行/actuator相关请求:

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
    // 跳过actuator路径的token校验
    if (request.getServletPath().startsWith("/actuator/")) {
        filterChain.doFilter(request, response);
        return;
    }
    // 原有token校验逻辑...
}

方法2:限定Jwt过滤器仅作用于/api路径

在SecurityFilterChain配置中,指定Jwt过滤器只对/api路径生效,不对/actuator路径执行校验:

@Bean
public SecurityFilterChain securityWebFilterChain(
        HttpSecurity http,
        JwtTokenProvider jwtTokenProvider) throws Exception {

    // 初始化Jwt过滤器并指定作用路径
    JwtTokenAuthenticationFilter jwtFilter = new JwtTokenAuthenticationFilter(jwtTokenProvider);
    jwtFilter.setFilterProcessesUrl("/api/**");

    return http
            .csrf(AbstractHttpConfigurer::disable)
            .httpBasic(AbstractHttpConfigurer::disable)
            .sessionManagement(AbstractHttpConfigurer::disable)
            .authorizeHttpRequests(authz -> authz
                    .requestMatchers("/actuator/**").permitAll()
                    .requestMatchers("/api/**").hasRole("USER")
                    .anyRequest().authenticated())
            .addFilterAt(jwtFilter, UsernamePasswordAuthenticationFilter.class)
            .build();
}
收尾操作

删除不推荐的WebSecurityCustomizer配置,确保Spring Security使用permitAll的推荐方式处理权限。

内容的提问来源于stack exchange,提问作者pixel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 11:46:00