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

Spring Security配置问题:如何放行指定GET端点并认证其余请求

问题原因及解决方法

问题根源

AntPathRequestMatcher.antMatcher() 仅匹配请求的路径部分(即/api/check/status),不会处理URL中的查询参数(?appId=xxx)。你写的/api/check/status?appId=**会被当成路径的一部分,而实际请求的路径是/api/check/status,所以匹配规则不生效,导致该端点仍被要求认证。

解决方案

根据你的需求,分两种场景给出配置:

场景1:放行所有GET /api/check/status请求(无论appId参数值)

直接指定HTTP方法和路径即可:

public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http
        // 认证HTTP端点
        .authorizeHttpRequests(authorize -> authorize
            .requestMatchers(HttpMethod.GET, "/api/check/status").permitAll()
            .anyRequest().authenticated()
        )
        // 会话设置为无状态
        .sessionManagement(smc -> smc
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        );
    return http.build();
}

场景2:仅放行带appId参数的GET /api/check/status请求

如果需要严格校验存在appId参数,可以使用Lambda表达式自定义匹配规则:

public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http
        .authorizeHttpRequests(authorize -> authorize
            .requestMatchers(request -> 
                HttpMethod.GET.equals(request.getMethod()) &&
                "/api/check/status".equals(request.getRequestURI()) &&
                request.getParameter("appId") != null
            ).permitAll()
            .anyRequest().authenticated()
        )
        .sessionManagement(smc -> smc
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        );
    return http.build();
}

额外提示

  • 原代码缺少return http.build();和sessionManagement的闭合括号,记得补充以保证代码编译通过。
  • 如果需要对appId做更复杂的格式校验,可在控制器方法上结合@PreAuthorize注解实现细粒度控制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:11:26