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

添加WebSecurityConfig引发404错误:本地正常部署异常

问题分析与解决方案

核心问题

添加WebSecurityConfig后,本地运行时访问根路径能正常跳转到登录页,但部署到服务器后,未登录时访问根路径直接出现404;移除该配置类后404消失,但需要保留安全权限控制。

可能原因及修复方案

1. 未明确指定登录页面路径,导致部署环境下默认登录页无法访问

Spring Security默认登录页面路径为/login,但如果未显式配置登录页,且部署环境缺少默认登录页的静态资源支持,就会触发404。同时需确保登录相关路径允许匿名访问。

修改configure(HttpSecurity http)方法,补充登录页配置及匿名访问规则:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable()
            .authorizeRequests()
            // 放开登录相关路径,允许匿名访问
            .antMatchers("/login", "/login-error").permitAll()
            // 合并重复的权限规则,简化配置
            .antMatchers("/abc", "/def", "/ghi", "/jkl", "/mno", "/pqr").hasAnyAuthority("ROLE_one")
            .antMatchers("/stu", "/vwx", "/yza", "/bcd").hasAnyAuthority("ROLE_two")
            // 根路径允许匿名访问
            .antMatchers("/").permitAll()
            // 其余所有请求需认证
            .anyRequest().authenticated()
            .and().formLogin()
            // 指定登录页路径(若为自定义页面,需确保该路径有Controller映射或静态资源存在)
            .loginPage("/login")
            // 登录请求提交路径
            .loginProcessingUrl("/login")
            .successHandler(successHandler)
            // 登录失败跳转路径
            .failureUrl("/login-error")
            .and().logout().permitAll();
}

2. 权限规则顺序问题

Spring Security的antMatchers规则为从上到下匹配,若后续规则覆盖前置规则,可能导致根路径权限设置失效。需确保permitAll的路径规则放在权限校验规则之后、anyRequest().authenticated()之前。

3. 部署环境上下文路径差异

若部署时应用带有上下文路径(如Tomcat中部署为/demo,访问根路径为http://xxx/demo/),需确认配置中的路径是否相对于上下文路径。Spring Security路径默认适配上下文,但若有自定义登录页,需保证Controller或静态资源路径与部署环境一致。

4. 检查自定义组件的部署兼容性

确认LoginSuccessHandler和CustomUserDetailsService在部署环境中能正常加载:

  • 检查生产环境数据源配置是否正确(数据库地址、用户名密码等)
  • 确认依赖包是否完整,无缺失类或依赖冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:20:41