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

Spring配置多个authentication providers时登录页加载失败报错问题排查

配置问题排查与修复方案

核心问题原因

Spring Security 多<http>配置遵循前缀匹配、按顺序生效的规则,只有请求路径匹配<http>的pattern属性时,才会走对应的安全过滤链,你当前的配置存在多个路径无法匹配到对应过滤链的问题,具体如下:

问题1:登录/登出处理路径未匹配到对应安全链

Spring Security form-login默认的登录提交路径是/j_spring_security_check,logout默认的登出路径是/j_spring_security_logout,这两个路径都不属于你配置的/portal/**、/siviri/**前缀范围,没有对应过滤链处理,直接触发错误。

修复方法:

给每个模块的登录、登出配置指定对应前缀下的处理路径:

<!-- portal 模块http块修改 -->
<form-login login-page='/portal/portal_login.jsp'
    login-processing-url="/portal/j_spring_security_check"
    authentication-failure-url="/portal/portal_login.jsp?error=true"
    authentication-failure-handler-ref="customAuthenticationFailureHandlerPortal"
    authentication-success-handler-ref="customAuthenticationSuccessPortal"/>
<logout logout-success-url="/portal/portal_login.jsp"
    invalidate-session="false" 
    logout-url="/portal/j_spring_security_logout" />

<!-- siviri 模块http块修改 -->
<form-login login-page="/siviri/crm_login.jsp"
    login-processing-url="/siviri/j_spring_security_check"
    authentication-failure-url="/siviri/crm_login.jsp?error=true"
    authentication-failure-handler-ref="customAuthenticationFailureHandler"
    authentication-success-handler-ref="customAuthenticationSuccess"/>
<logout logout-success-url="/siviri/crm_login.jsp"
    invalidate-session="false" 
    logout-url="/siviri/j_spring_security_logout" />

同时修改对应登录页的表单提交地址、登出按钮的请求地址,和上面配置的路径保持一致。

问题2:缺少默认安全过滤链

你当前仅配置了两个匹配指定前缀的<http>规则,所有不在/portal/**、/siviri/**下的请求都没有对应安全链处理,会直接抛出异常。

修复方法:

在所有<http>配置的最后添加默认兜底的安全链:

<http use-expressions="true" pattern="/**">
    <intercept-url pattern="/**" access="permitAll" />
    <csrf disabled="true"/>
</http>

问题3:认证成功跳转路径配置错误

你两个成功处理器的redirectPage都配置的是根路径下的/crm.jsp,和你多模块的路径规则不匹配,登录成功后会出现404。

修复方法:

修改对应bean的redirectPage属性为正确的模块内路径:

<!-- siviri模块成功处理器 -->
<b:bean id="customAuthenticationSuccess" class="authentication.providers.NA_AuthenticationSuccess">
    <b:property name="redirectPage" value="/siviri/crm.jsp"></b:property>
</b:bean>
<!-- portal模块成功处理器 -->
<b:bean id="customAuthenticationSuccessPortal" class="authentication.providers.NA_AuthenticationSuccessPortal">
    <b:property name="redirectPage" value="/portal/portal.jsp"></b:property>
</b:bean>

问题4:CSRF配置不一致

你siviri模块的http块禁用了CSRF,portal模块没有禁用,如果你的登录表单没有携带CSRF token,提交登录时会返回403错误,和你单http配置的行为不一致。

修复方法:

在portal模块的http块也添加CSRF禁用配置:

<http use-expressions="true" pattern="/portal/**" authentication-manager-ref = "authenticationManagerPortal"> 
    <!-- 原有其他配置 -->
    <csrf disabled="true" />
</http>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:15:04