我有一个使用 Spring 2.5.6 和 Spring Security 2.0.4 的 Web 应用程序。我已经实现了一个工作登录页面,它根据 Web 服务对用户进行身份验证。身份验证是通过定义一个自定义身份验证管理器来完成的,如下所示:
<beans:bean id="customizedFormLoginFilter"
class="org.springframework.security.ui.webapp.AuthenticationProcessingFilter">
<custom-filter position="AUTHENTICATION_PROCESSING_FILTER" />
<beans:property name="defaultTargetUrl" value="/index.do" />
<beans:property name="authenticationFailureUrl" value="/login.do?error=true" />
<beans:property name="authenticationManager" ref="customAuthenticationManager" />
<beans:property name="allowSessionCreation" value="true" />
</beans:bean>
<beans:bean id="customAuthenticationManager"
class="com.sevenp.mobile.samplemgmt.web.security.CustomAuthenticationManager">
<beans:property name="authenticateUrlWs" value="${WS_ENDPOINT_ADDRESS}" />
</beans:bean>
身份验证管理器类:
public class CustomAuthenticationManager implements AuthenticationManager, ApplicationContextAware {
@Transactional
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
//authentication logic
return new UsernamePasswordAuthenticationToken(principal, authentication.getCredentials(),
grantedAuthorityArray);
}
登录 jsp 的基本部分如下所示:
<c:url value="/j_spring_security_check" var="formUrlSecurityCheck"/>
<form method="post" action="${formUrlSecurityCheck}">
<div id="errorArea" class="errorBox">
<c:if test="${not empty param.error}">
${sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message}
</c:if>
</div>
<label for="loginName">
Username:
<input style="width:125px;" tabindex="1" id="login" name="j_username" />
</label>
<label for="password">
Password:
<input style="width:125px;" tabindex="2" id="password" name="j_password" type="password" />
</label>
<input type="submit" tabindex="3" name="login" class="formButton" value="Login" />
</form>
现在的问题是应用程序应该使用Spring Web Flow。将应用程序配置为使用 Spring Web Flow 后,登录不再起作用 - 对“/j_spring_security_check”的表单操作导致空白页面没有错误消息。调整现有登录过程以使其与 Spring Web Flow 一起使用的最佳方法是什么?
编辑:没有错误消息,只是显示了一个空白页。它现在可以工作了 - 问题是 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>
由于尽管问题解决了,但我无法取消赏金,因此将赏金授予最有见地的答案或链接,这将有助于其他人配置 Spring Security 和 Web Flow 一起工作。