0

我已经开发了 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。它无法正确重定向。请任何人指导我有什么问题?

4

1 回答 1

2

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

我已经编写了一个拦截器来完全按照您的描述进行操作,请随时阅读这篇文章

希望有帮助

于 2012-12-24T10:34:09.007 回答