2012-12-24 46 views
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。它無法正確重定向。請任何人指導我什麼是問題?

+0

+1對於Andrea的評論;除非你明確地組合多種技術,否則使用攔截器。除此之外,你沒有真正提供足夠的信息來幫助;什麼是'contextPath'?用戶登錄時發生錯誤還是不正常? –

回答

2

我無法幫助您調試應用程序監視器,但是如果您使用的是Struts2,爲什麼不使用Struts2組件,如Interceptors(基於攔截過濾器技術)?

我已經寫了一個攔截器來完成你所描述的內容,請隨時致電read the post

希望可以幫助

相關問題