为什么我的自定义登录页面没有显示Spring Security 4?

vph*_*nyc 8 java spring-security

我能够使用Spring Security 3.2.4的自定义登录页面,但在使用4.0.0迁移下面的代码后,我看到了一个通用的登录表单而不是我的自定义登录表单:

  <beans:bean id="authSuccessHandler" class="com.company.web.RoleBasedAuthenticationSuccessHandler" />

  <http disable-url-rewriting="false" use-expressions="true">
    <form-login login-page="/login"
        username-parameter="j_username"
        password-parameter="j_password"
        login-processing-url="/j_spring_security_check"
        authentication-failure-url="/login?login_error=true"
        authentication-success-handler-ref="authSuccessHandler"/>
    <!-- SOME INTERCEPT-URLs (redacted) -->
    <intercept-url pattern="/login" access="permitAll"/>
    <remember-me 
         remember-me-parameter="_spring_security_remember_me"
         remember-me-cookie="SPRING_SECURITY_REMEMBER_ME_COOKIE"/>
    <logout 
         logout-url="/j_spring_security_logout" 
         logout-success-url="/index" />
  </http>
Run Code Online (Sandbox Code Playgroud)

我还尝试在各种Spring类上启用调试日志记录.我在我的自定义authSuccessHandler上设置它,但我没有看到它的任何输出.在搜索SO或Google上也没有运气.

这个配置有什么不兼容的吗?

更新:

我也使用Apache Tiles:

  <definition name="login" extends="scrollableLayout">
    <put-attribute name="header" value="/WEB-INF/jsp/heading_blue.jsp"/>
    <put-attribute name="body" value="/WEB-INF/jsp/login.jsp"/>
  </definition>
Run Code Online (Sandbox Code Playgroud)

并使用以下内容:

  <mvc:view-controller path="/login" />  
Run Code Online (Sandbox Code Playgroud)

man*_*ish 6

Spring Security 3.x用作spring_security_login默认登录URL(source:官方文档).这可以设置为自定义值<security:form-login login-page="/login">并映射到控制器以呈现自定义页面.

Spring Security 4.x已经放弃spring_security_login并切换login为默认登录URL(source:官方Spring Security 4.x迁移指南).因此,URL login现在转到默认的Spring Security基础结构,该基础结构显示默认的自动生成的登录页面.

如果您使用JSP作为视图渲染技术,那么补救措施很简单.只需将您的登录页面重命名为login.jsp,将其放在页面层次结构的根文件夹中,Spring Security将自动将其提取.如果您不使用JSP,则必须使用不同的login-page值(可能signin代替,login然后更改控制器映射).

请注意,默认注销URL在4.x中也已更改.如果您为注销URL编写了任何自定义逻辑,请务必查看该逻辑.

请查看官方迁移指南,因为4.x中有很多变化.

  • 使用`/ login`作为登录URL [是4.0.0中的错误](https://jira.spring.io/browse/SEC-2919)时出现的自动生成的登录页面似乎已修复在4.0.1.尝试升级到Spring Security 4.0.1,看看是否可以使用`/ login`作为登录URL. (3认同)