java web工程,过滤器判断session失效

通常情况下,java web项目都是通过过滤器来判断session是否失效。下面做了一个例子,实现过滤器验证用户的会话是否丢失。

web.xml中的配置:

  1. <filter>  
  2.         <filter-name>filter</filter-name>  
  3.         <filter-class>com.zyujie.common.LoginFilter</filter-class>  
  4.     </filter>  
  5.     <!-- servlet规范,不能以/*.jsp这样的结尾,写全,或者写成/app/*,这样的才行 -->  
  6.     <filter-mapping>  
  7.         <filter-name>filter</filter-name>  
  8.         <url-pattern>/*</url-pattern>  
  9.     </filter-mapping>  
  10.       
  11.     <session-config>   
  12.         <session-timeout>1</session-timeout>  
  13.     </session-config>  

过滤器类:

  1. package com.zyujie.common;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5.   
  6. import javax.servlet.Filter;  
  7. import javax.servlet.FilterChain;  
  8. import javax.servlet.FilterConfig;  
  9. import javax.servlet.ServletException;  
  10. import javax.servlet.ServletRequest;  
  11. import javax.servlet.ServletResponse;  
  12. import javax.servlet.http.HttpServletRequest;  
  13. import javax.servlet.http.HttpServletResponse;  
  14. import javax.servlet.http.HttpSession;  
  15.   
  16. public class LoginFilter implements Filter {  
  17.   
  18.     public void destroy() {  
  19.         // TODO Auto-generated method stub  
  20.           
  21.     }  
  22.   
  23.     public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {  
  24.         // TODO Auto-generated method stub  
  25.         HttpServletRequest request = (HttpServletRequest) req;  
  26.         HttpServletResponse response = (HttpServletResponse) res;  
  27.         HttpSession session = request.getSession();  
  28.         // 如果session不为空,则可以浏览其他页面  
  29.         String url = request.getServletPath();  
  30.         System.out.println(url);  
  31.         //这里判断目录,后缀名,当然也可以写在web.xml中,用url-pattern进行拦截映射  
  32.         if ((!request.getServletPath().equals("/login.action"))  
  33.                 && (!request.getServletPath().equals("/login.jsp"))  
  34.                 && (!request.getServletPath().equals("/relogin.jsp"))  
  35.                 && (!request.getServletPath().equals("/jquery-1.8.0.min.js"))) {  
  36.             System.out.println(request.getServletPath());  
  37.             if (session.getAttribute("userInfo") == null) {  
  38.                 session.invalidate();  
  39.                 response.setContentType("text/html;charset=gb2312");  
  40.                 PrintWriter out = response.getWriter();  
  41.                 out.println("<script language='javascript' type='text/javascript'>");  
  42.                 out.println("alert('由于你长时间没有操作,导致Session失效!请你重新登录!');window.location.href='" + request.getContextPath() + "/relogin.jsp'");  
  43.                 out.println("</script>");  
  44.             } else {  
  45.                 chain.doFilter(request, response);  
  46.             }  
  47.         } else {  
  48.             chain.doFilter(request, response);  
  49.         }  
  50.   
  51.     }  
  52.   
  53.     public void init(FilterConfig arg0) throws ServletException {  
  54.         // TODO Auto-generated method stub  
  55.   
  56.     }  
  57.   
  58. }  

做了一个测试:所有的ajax请求,都不能过滤,也不知道为什么。如果ajax要进行session判断的话,可以通过拦截器:代码如下:(ajax请求不能跳转页面,不知道怎么实现这种ajax请求,session丢失,页面跳转。)

struts2配置,拦截器:

  1. <package name="myInterceptors" namespace="/system/login" extends="struts-default">  
  2.       
  3.         <interceptors>  
  4.             <interceptor name="timer" class="com.zyujie.common.TimerInterceptor" />  
  5.             <interceptor name="logger" class="com.zyujie.common.LoggerInterceptor" />  
  6.             <interceptor name="sessionFilter" class="com.zyujie.common.SessionFilterInterceptor" />  
  7.         </interceptors>  
  8.           
  9.         <action name="userLogin" class="userLoginAction" method="userLogin">  
  10.             <interceptor-ref name="logger" />  
  11.             <interceptor-ref name="timer" />  
  12.             <result name="input" type="redirect">/login.jsp</result>  
  13.             <result name="success" type="redirect">/ok.jsp</result>  
  14.         </action>  
  15.           
  16.         <action name="getSession" class="userLoginAction" method="getSession">  
  17.             <result name="input" type="redirect">/login.jsp</result>  
  18.         </action>  
  19.       
  20.         <action name="reLogin" class="userLoginAction" method="reLogin">  
  21.             <result name="input" type="redirect">/relogin.jsp</result>  
  22.             <result name="success" type="redirect">/ok.jsp</result>  
  23.         </action>  
  24.           
  25.         <action name="testSession" class="userLoginAction" method="testSession">  
  26.             <interceptor-ref name="sessionFilter" />  
  27.             <result name="input" type="redirect">/login.jsp</result>  
  28.             <result name="success" type="redirect">/ok.jsp</result>  
  29.         </action>  
  30.           
  31.     </package>  

拦截类:
  1. package com.zyujie.common;  
  2.   
  3. import java.io.PrintWriter;  
  4.   
  5. import javax.servlet.http.HttpServletResponse;  
  6. import javax.servlet.http.HttpSession;  
  7.   
  8. import org.apache.struts2.ServletActionContext;  
  9.   
  10. import com.opensymphony.xwork2.Action;  
  11. import com.opensymphony.xwork2.ActionInvocation;  
  12. import com.opensymphony.xwork2.interceptor.AbstractInterceptor;  
  13.   
  14. public class SessionFilterInterceptor extends AbstractInterceptor {  
  15.   
  16.     @Override  
  17.     public String intercept(ActionInvocation invocation) throws Exception {  
  18.         HttpSession session = ServletActionContext.getRequest().getSession();  
  19.         if(session.getAttribute("userInfo") == null){  
  20. //          HttpServletResponse response = ServletActionContext.getResponse();  
  21. //          ServletActionContext.getResponse().sendRedirect(Action.INPUT);  
  22. //          session.invalidate();  
  23. //          response.setContentType("text/html;charset=gb2312");  
  24. //          PrintWriter out = response.getWriter();  
  25. //          out.println("<script language='javascript' type='text/javascript'>");  
  26. //          out.println("alert('由于你长时间没有操作,导致Session失效!请你重新登录!');window.location.href='/login.jsp'");  
  27. //          out.println("</script>");  
  28. //          return "none";  
  29.             return Action.INPUT;  
  30.         }else{  
  31.             return invocation.invoke();  
  32.         }  
  33.     }  
  34.   
  35. }  

对于ajax的请求,不能跳转页面。很多人说的,还是只有在页面端判断返回值,进行跳转。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值