Session监听(Action 、jsp过滤)
2015-12-31 14:20
691 查看
问题描述: 项目中使用了struts dwr spring ,利用filter过滤请求时发生问题: 1)如果filter配置为: /* 可以拦截action与jsp (但不符合需求) 2)filter配置为: *.jsp 与 *.action 时,实际是拦不住action解决方案: 实现一个类,继承拦截器实现filter=====================================Session过期判断: 1) Filter中 从session中获取某个值,不存在,则session过期,从而进行相应处理2) 利用session的方法: isNew()或者从request获取session:request.getSession(false) == null3) 在struts的拦截器中,可以直接判断session是否过期: ServletActionContext.getRequest().isRequestedSessionIdValid()
然后跳转到登录页面:拦截器中代码:
注意:拦截器的返回值是 与action的result一致的视图名,当然可以返回null .filter中代码:
然后跳转到登录页面:拦截器中代码:
if(!ServletActionContext.getRequest().isRequestedSessionIdValid()){ //session过期,转向session过期提示页,最终跳转至登录页面 HttpServletResponse response = ServletActionContext.getResponse(); HttpServletRequest req = ServletActionContext.getRequest(); String location = req.getContextPath() + "/login.jsp"; //response.sendRedirect(location); 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='" + req.getContextPath() + "/login.jsp'"); out.println("</script>"); return null; }
注意:拦截器的返回值是 与action的result一致的视图名,当然可以返回null .filter中代码:
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) arg0; HttpServletResponse resp = (HttpServletResponse) arg1; HttpSession session = req.getSession(); ServletContext sc=session.getServletContext(); String webapp = req.getContextPath(); OperatorBo operatorBo = (OperatorBo) session .getAttribute(ConstCodeDef.KEY_SESSION_OPERATORBO); String uri = req.getRequestURI(); if (operatorBo != null) { arg2.doFilter(req, resp); } else { if (uri.endsWith("login.jsp") || uri.endsWith("sale/") ) { arg2.doFilter(req, resp); }else if(uri.endsWith("manager/admin_index.jsp")){ arg2.doFilter(req, resp); }else if(uri.endsWith("manager/admin_login.jsp")){ arg2.doFilter(req, resp); } else if(uri.contains("main.jsp") || uri.endsWith("main.jsp") || uri.endsWith("main.jsp/")){ resp.sendRedirect("/sale"); }else{ //resp.sendRedirect("login.jsp"); //arg2.doFilter(req, resp); resp.setContentType("text/html;charset=gb2312"); PrintWriter out = resp.getWriter(); out.println("<script language='javascript' type='text/javascript'>"); out.println("alert('由于你长时间没有操作,导致Session失效!请你重新登录!');window.location.href='" + req.getContextPath() + "/login.jsp'"); out.println("</script>"); } } }
相关文章推荐
- javascript禁止表单输入
- EL标签和JSTL标签---JSP页面的应用
- js simple drag.
- jsp带参转链接
- 纯js 连连看,多套图片连连看
- Extjs5新特性
- HTML --- <a href=”#”>与 <a href=”javascript:void(0)” 的区别
- 在js中对日期的加减法
- JS的数组
- 组织结构图 js实现
- Javascript 严格模式use strict详解
- (译)详解javascript立即执行函数表达式(IIFE)
- 关于js中的return的用法
- Cordova提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头、麦克风等。
- Cordova提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头、麦克风等。
- 轻量级桌面应用开发的捷径——nw.js
- Backbone.js 为复杂Javascript应用程序提供模型(models)、集合(collections)、视图(views)的结构
- Backbone.js 为复杂Javascript应用程序提供模型(models)、集合(collections)、视图(views)的结构
- three.js是JavaScript编写的WebGL第 三方库
- three.js是JavaScript编写的WebGL第 三方库