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

Heroku部署的Spring应用未配置登录却要求鉴权,Postman请求返回403错误

问题原因
  • 初始访问需要账号密码的原因:只要项目引入了spring-boot-starter-security依赖,Spring Security会自动启用默认安全配置:默认用户名是user,启动时会在控制台打印随机生成的密码,所有请求都需要登录后才能访问,和你是否手写鉴权逻辑无关。
  • 修改配置后返回403的原因有两点:
    1. 你仅关闭了httpBasic和formLogin两种登录校验方式,但没有配置请求权限规则,Spring Security默认仍要求所有请求完成认证,此时没有可用的登录入口,所有请求会直接被拦截返回403。
    2. Spring Security默认开启CSRF防护,Postman发送POST、PUT、DELETE等非GET类型请求时,没有携带合法的CSRF令牌,也会直接触发403错误。
解决方案

根据你的使用场景选择对应方案即可:

  • 场景1:完全不需要使用Spring Security的安全能力
    直接从项目依赖中移除spring-boot-starter-security相关依赖,重新打包部署后就不会触发任何安全校验逻辑。
  • 场景2:需要保留Spring Security依赖,暂时放行所有请求
    修改你的安全配置,补充权限放行规则,按需关闭CSRF防护:
    1. 如果你使用的是Spring Security 5.7以前的版本(仍在使用WebSecurityConfigurerAdapter),修改配置如下:
    @Override
    protected void configure(HttpSecurity security) throws Exception {
        security
                .httpBasic().disable()
                .formLogin().disable()
                .csrf().disable() // 关闭CSRF防护,适配Postman/接口调用场景
                .authorizeRequests()
                .anyRequest().permitAll(); // 放行所有请求,无需认证
    }
    
    1. 如果你使用的是Spring Security 5.7及以上版本(WebSecurityConfigurerAdapter已废弃),使用如下配置:
    @Configuration
    public class SecurityConfig {
        @Bean
        public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
            return http
                    .httpBasic().disable()
                    .formLogin().disable()
                    .csrf().disable()
                    .authorizeHttpRequests(auth -> auth.anyRequest().permitAll())
                    .build();
        }
    }
    

修改配置后重新打包部署到Heroku即可,部署时确认发布的是最新版本的代码,避免旧版本缓存导致配置不生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:45:03