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

如何在Spring Security中仅允许/info端点使用GET请求?

实现Spring Security中/info端点仅允许GET请求的配置方法

完全可以在当前的SecurityFilterChain配置中实现这个需求,只需要给antMatchers指定对应的HTTP方法即可,无需修改控制器或路径。

修改后的完整配置代码如下:

import org.springframework.http.HttpMethod

@Bean
fun filterChain(http: HttpSecurity): SecurityFilterChain {
    http
        .csrf().disable()
        .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        .and()
        .authorizeHttpRequests() {
            it.antMatchers("/auth/**").permitAll()
            // 仅允许GET方法访问/info端点,无需认证
            it.antMatchers(HttpMethod.GET, "/info").permitAll()
            // 其他所有请求必须经过认证
            it.anyRequest().authenticated()
        }
        .exceptionHandling().authenticationEntryPoint(HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED))

    return http.build()
}

配置逻辑说明:

  • 通过antMatchers(HttpMethod.GET, "/info")精准限定:只有GET请求的/info端点允许无认证访问;
  • it.anyRequest().authenticated()确保其他所有请求(包括POST/PUT等非GET方法的/info)都需要携带合法认证信息;
  • 当非GET方法访问/info且未提供认证信息时,会触发你配置的HttpStatusEntryPoint直接返回HTTP 401未授权响应,完全匹配你的需求。

控制器注解方案的问题:

你之前使用@PreAuthorize返回403是因为该注解触发的是权限不足的AccessDeniedException,而你需要的是未认证的AuthenticationException——只有后者会被authenticationEntryPoint处理并返回401。通过SecurityFilterChain的HTTP方法匹配配置,能直接把非GET的/info请求纳入认证校验流程,自然会返回正确的响应状态码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:47:22