java web工程,过滤器判断session失效
来源:互联网 发布:java web国际化 编辑:程序博客网 时间:2024/04/30 01:03
通常情况下,java web项目都是通过过滤器来判断session是否失效。下面做了一个例子,实现过滤器验证用户的会话是否丢失。
web.xml中的配置:
<filter><filter-name>filter</filter-name><filter-class>com.zyujie.common.LoginFilter</filter-class></filter><!-- servlet规范,不能以/*.jsp这样的结尾,写全,或者写成/app/*,这样的才行 --><filter-mapping><filter-name>filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><session-config> <session-timeout>1</session-timeout></session-config>
过滤器类:
package com.zyujie.common;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class LoginFilter implements Filter {public void destroy() {// TODO Auto-generated method stub}public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {// TODO Auto-generated method stubHttpServletRequest request = (HttpServletRequest) req;HttpServletResponse response = (HttpServletResponse) res;HttpSession session = request.getSession();// 如果session不为空,则可以浏览其他页面String url = request.getServletPath();System.out.println(url);//这里判断目录,后缀名,当然也可以写在web.xml中,用url-pattern进行拦截映射if ((!request.getServletPath().equals("/login.action"))&& (!request.getServletPath().equals("/login.jsp"))&& (!request.getServletPath().equals("/relogin.jsp"))&& (!request.getServletPath().equals("/jquery-1.8.0.min.js"))) {System.out.println(request.getServletPath());if (session.getAttribute("userInfo") == null) {session.invalidate();response.setContentType("text/html;charset=gb2312");PrintWriter out = response.getWriter();out.println("<script language='javascript' type='text/javascript'>");out.println("alert('由于你长时间没有操作,导致Session失效!请你重新登录!');window.location.href='" + request.getContextPath() + "/relogin.jsp'");out.println("</script>");} else {chain.doFilter(request, response);}} else {chain.doFilter(request, response);}}public void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}}
做了一个测试:所有的ajax请求,都不能过滤,也不知道为什么。如果ajax要进行session判断的话,可以通过拦截器:代码如下:(ajax请求不能跳转页面,不知道怎么实现这种ajax请求,session丢失,页面跳转。)
struts2配置,拦截器:
<package name="myInterceptors" namespace="/system/login" extends="struts-default"><interceptors><interceptor name="timer" class="com.zyujie.common.TimerInterceptor" /><interceptor name="logger" class="com.zyujie.common.LoggerInterceptor" /><interceptor name="sessionFilter" class="com.zyujie.common.SessionFilterInterceptor" /></interceptors><action name="userLogin" class="userLoginAction" method="userLogin"> <interceptor-ref name="logger" /> <interceptor-ref name="timer" /><result name="input" type="redirect">/login.jsp</result><result name="success" type="redirect">/ok.jsp</result> </action> <action name="getSession" class="userLoginAction" method="getSession"> <result name="input" type="redirect">/login.jsp</result> </action><action name="reLogin" class="userLoginAction" method="reLogin"><result name="input" type="redirect">/relogin.jsp</result><result name="success" type="redirect">/ok.jsp</result></action><action name="testSession" class="userLoginAction" method="testSession"><interceptor-ref name="sessionFilter" /><result name="input" type="redirect">/login.jsp</result><result name="success" type="redirect">/ok.jsp</result></action></package>
拦截类:
package com.zyujie.common;import java.io.PrintWriter;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class SessionFilterInterceptor extends AbstractInterceptor {@Overridepublic String intercept(ActionInvocation invocation) throws Exception {HttpSession session = ServletActionContext.getRequest().getSession();if(session.getAttribute("userInfo") == null){//HttpServletResponse response = ServletActionContext.getResponse();//ServletActionContext.getResponse().sendRedirect(Action.INPUT);//session.invalidate();//response.setContentType("text/html;charset=gb2312");//PrintWriter out = response.getWriter();//out.println("<script language='javascript' type='text/javascript'>");//out.println("alert('由于你长时间没有操作,导致Session失效!请你重新登录!');window.location.href='/login.jsp'");//out.println("</script>");//return "none";return Action.INPUT;}else{return invocation.invoke();}}}
对于ajax的请求,不能跳转页面。很多人说的,还是只有在页面端判断返回值,进行跳转。
- java web工程,过滤器判断session失效
- java web工程,过滤器判断session失效
- 在java web 工程中跳过过滤器
- 判断session失效
- 使用过滤器处理Session失效的问题
- 使用过滤器来检测session失效
- 使用过滤器实现判断session
- java session失效设置
- 判断一个工程是java还是web
- 关于Web中Session失效
- 判断session失效后返回登录页面
- java 中 session 失效设置
- java 中 session 失效设置
- java 中 session 失效设置
- Java设置session失效时间
- 配置struts2过滤器 session失效跳转到登陆页面
- session失效,过滤器中frame框架页面跳转
- 过滤器面对ajax访问遇到Session失效问题
- 如何学好JAVA
- POJ 2704(Pascal's Travels-裸dp)
- (char) (Math.random() * 26 + 'A')
- 温故而知新:Delegate,Action,Func,匿名方法,匿名委托,事件
- log(m+n)时间找到中位数
- java web工程,过滤器判断session失效
- android进程讲解2
- Java 单例模式详解
- 【小蒙淘金】3.25晚评-黄金白银行情分析及部分操作建议
- Meta
- 图片阴影效果和影子效果
- 关于 windows 不能在本地计算机中启动tomcat服务问题的解决方案
- python动态导入模块、检查模块是否安装
- DirectX 学习