我使用的是Spring 3.1版本。
我已经实现了spring security以登录我的门户网站。除了一个问题,它工作正常。我已将会话超时设置为2分钟。
一旦发生超时,然后用户点击任何URL,它就会被重定向到注销页面。但是当用户重新进行身份验证时,用户直接登陆主页,这是默认目标URL而不是最后一个访问页面。
如果用户被访问/home/editproduct
,那么在超时&当他再次进行重新认证时,应该访问home/editproduct
而不是/home
页面。
我正在使用JSON& AJAX电话。
<bean id="myNePublicUserNamePasswordAuthFilter"
class="com.ne.mynelson.authentication.publicuser.MyNePublicUserPasswordAuthFilter">
<property name="filterProcessesUrl" value="/service/json_authentication_check"></property>
<property name="authenticationManager" ref="myNePublicUserAuthenticationManager" />
<property name="authenticationFailureHandler" ref="failureHandler" />
<property name="authenticationSuccessHandler" ref="successHandler" />
<property name="authenticationInputProcessor" ref="myNePublicUserAuthInputProcessor"></property>
</bean>
<bean id="successHandler"
class="com.ne.mynelson.authentication.publicuser.MyNePublicUserAuthSuccessHandler">
<property name="authHandlerView" ref="authHandlerView"></property>
<property name="sessionRegistry" ref="sessionRegistry"></property>
<property name="publicLoginManager" ref="publicLoginManager"></property>
</bean>
答案 0 :(得分:0)
编辑:SessionManagementFilter
您需要实现InvalidSessionStrategy
,覆盖onInvalidSessionDetected
方法,就像SimpleRedirectInvalidSessionStrategy
一样,但在重定向之前,您需要创建一个新会话,并将请求保存到会话。
HttpSession session = request.getsession(false);
if (session != null) {
// for creating a new session
session.invalidate();
}
DefaultSavedRequest savedRequest = new DefaultSavedRequest(request,
new PortResolverImpl());
request.getSession(true).setAttribute("SPRING_SECURITY_SAVED_REQUEST", savedRequest);
redirectStrategy.sendRedirect(request, response, destinationUrl);
然后将此bean注入SessionManagementFilter
。
编辑:对于ConcurrentSessionFilter
如果你使用concurrentSessionFilter,你可以实现SessionInformationExpiredStrategy
,就像SimpleRedirectSessionInformationExpiredStrategy
一样,在方法onExpiredSessionDetected
中,仍然像我上面发布的一样,在重定向之前,创建新会话,并将保存请求放入新会话,您可以通过event.getRequest()获取请求,然后将此sessionInfomationExpiredStrategy
注入concurrentSessionFilter
。
public void onExpiredSessionDetected(SessionInformationExpiredEvent event) throws IOException {
logger.debug("Redirecting to '" + destinationUrl + "'");
DefaultSavedRequest savedRequest = new DefaultSavedRequest(event.getRequest(),
new PortResolverImpl());
request.getSession(true).setAttribute("SPRING_SECURITY_SAVED_REQUEST", savedRequest);
redirectStrategy.sendRedirect(event.getRequest(), event.getResponse(), destinationUrl);
}
最后,使用SavedRequestAwareAuthenticationSuccessHandler
代替SimpleUrlAuthenticationSuccessHandler
。它将尝试获取请求目标URL,然后重定向到保存的URL。