Struts2 - SessionMonitor - 该页面未正确重定向

时间:2012-12-24 09:58:42

标签: java jsp servlets struts2 struts

我开发了struts2 web应用程序。我需要做会话监控。如果用户没有登录系统/或会话超时,则需要自动重定向到登录页面。

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 个答案:

答案 0 :(得分:2)

我无法帮助您调试Application Monitor,但如果您使用的是Struts2,为什么不使用Struts2组件,例如Interceptors(基于拦截过滤器技术)?

我写了一个拦截器来完成你所描述的内容,随意read the post

希望有所帮助