0
我開發了struts2 web應用程序。我需要做會話監視器。如果用戶沒有登錄到系統/或會話超時,則自動需要重定向到登錄頁面。Struts2 - SessionMonitor - 頁面沒有正確重定向
的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter>
<filter-name>SessionMonitor</filter-name>
<filter-class>com.xont.tracker.security.filters.ApplicationSessionMonitor</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>SessionMonitor</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<description>This listener class will listen to user session and assigns session for 30 minutes </description>
<listener-class>com.xont.tracker.listeners.SessionListener</listener-class>
</listener>
<listener>
<description>This listener class will listen for context listeners </description>
<listener-class>com.xont.tracker.listeners.ContextListener</listener-class>
</listener>
<context-param>
<param-name>401</param-name>
<param-value>Not Authorized</param-value>
</context-param>
<context-param>
<param-name>401:timeout</param-name>
<param-value>Your session timed out. Please login again</param-value>
</context-param>
<context-param>
<param-name>300</param-name>
<param-value>You don't have permission to access the page</param-value>
</context-param>
<context-param>
<param-name>403</param-name>
<param-value>You must login to continue</param-value>
</context-param>
<error-page>
<error-code>404</error-code>
<location>/error_pages/error_404.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error_pages/unexpected_error.jsp</location>
</error-page>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
這是我ApplicationSessionMonitor
public class ApplicationSessionMonitor extends ApplicationMonitor {
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
try {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpSession session = request.getSession();
Object user = session.getAttribute("loged-user");
if (user == null) {
buildTempPath(session, requestedPath(request));
((HttpServletResponse) servletResponse).sendRedirect(contextPath);
} else {
goAhead(servletRequest, servletResponse, chain);
}
} catch (Exception e) {
e.printStackTrace();;
}
}
}
這是我在struts.xml
<package name="default" extends="struts-default" namespace="/">
<action name="login" class="com.xont.tracker.login.action.LoginAction">
<result name="success" type="redirect">index.jsp</result>
<result name="temp_url" type="redirect">${temp_url}</result>
<result name="error">login.jsp</result>
<result name="input">login.jsp</result>
</action> .....
始終好說The page isn't redirecting properly
。它無法正確重定向。請任何人指導我什麼是問題?
+1對於Andrea的評論;除非你明確地組合多種技術,否則使用攔截器。除此之外,你沒有真正提供足夠的信息來幫助;什麼是'contextPath'?用戶登錄時發生錯誤還是不正常? –