Spring Security无法在/ spring_security_login生成/映射默认登录页面

时间:2013-10-30 17:39:49

标签: java spring spring-mvc spring-security

我注意到如果我提到模式或输入对HTTP容器的RequestMatcher引用,则不会生成spring_security_login默认页面。我想知道为什么。是否期望在这种情况下(驱动多个http配置元素)我们需要提供自己的登录页面和身份验证逻辑?

这是我所指的配置。

<http pattern="/somearea/**" authentication-manager-ref="authMgr"  use-expressions="true" auto-config="true" request-matcher="ant">

这就是我的web.xml的样子,如果感兴趣的话。不是很花哨。 : - )

<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

另外,如果我创建自己的登录页面调用j_spring_security_check,则也找不到j_spring_security_check映射。如果需要更多配置信息,请告诉我。

1 个答案:

答案 0 :(得分:2)

原因是http@patternhttp@request-matcher-ref都决定是否使用该块。由于/spring_security_login/j_spring_security_check都不匹配提供的模式(/somearea/),因此不会使用该块。

要解决此问题,您需要确保将form-login @ login-processing-url配置为查看与http@pattern匹配的请求。您还需要指定登录页面并确保呈现自定义登录页面。例如,假设您确保URL / login呈现登录页面,则以下配置将起作用:

<http pattern="/somearea/**" authentication-manager-ref="authMgr"  use-expressions="true" auto-config="true" request-matcher="ant">
    <form-login login-processing-url="/somearea/login" loginPage="/login"/>    
</http>

或者,您可以创建一个仅执行身份验证的单独块:

<http pattern="/somearea/**" authentication-manager-ref="authMgr"  use-expressions="true" auto-config="true" request-matcher="ant">

</http>
<http authentication-manager-ref="authMgr" use-expressions="true" auto-config="true" request-matcher="ant">    
</http>

请记住,每个配置都是不同的,仅在模式或request-matcher-ref匹配时才适用。