struts2 session过期或无操作时自动返回登录
来源:互联网 发布:淘宝运营名词 编辑:程序博客网 时间:2024/06/07 16:53
<Context path="/livsorder" docBase="/home/httpd/html/livsorder"
defaultSessionTimeOut="3600" isWARExpanded="true"
isWARValidated="false" isInvokerEnabled="true"
isWorkDirPersistent="false"/>
2. 在web.xml中通过参数指定:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
其中30表示30分钟
3. 在程序中通过servlet api直接修改
HttpSession ses = request.getSession();
ses.setMaxInactiveInterval(10);
设置单位为秒,设置为-1永不过期。
a)当用户登录系统中后一段时间无任何操作,比如15分钟,让其自动返回到登录页面。
b) session过期时,自动返回登录。
然后在struts.xml中给每个action配置拦截器,并声明一个全局的result,当session失效的时候拦截器会转发到登陆页面package com.anxin.struts.interceptor;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;import com.anxin.bean.User;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;/** session过期、登录有效性及操作的权限验证拦截器 */public class LoginedCheckInterceptor extends AbstractInterceptor { /** 拦截请求并进行登录有效性验证 */ public String intercept(ActionInvocation ai) throws Exception { //取得请求的URL String url = ServletActionContext.getRequest().getRequestURL().toString(); HttpServletResponse response=ServletActionContext.getResponse(); response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setHeader("Cache-Control", "no-store"); response.setDateHeader("Expires",0); User user = null; //对登录与注销请求直接放行,不予拦截 if (url.indexOf("user_login.action")!=-1 || url.indexOf("logout.action")!=-1){ return ai.invoke(); } else{ //验证Session是否过期 if(!ServletActionContext.getRequest().isRequestedSessionIdValid()){ //session过期,转向session过期提示页,最终跳转至登录页面 return "tologin"; } else{ user = (User)ServletActionContext.getRequest().getSession().getAttribute("user"); //验证是否已经登录 if (user==null){ //尚未登录,跳转至登录页面 return "tologin"; }else{ return ai.invoke(); } } } }}
<?xml version="1.0" encoding="gbk"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts> <package name="anxin" extends="struts-default"> <!-- 配置自定义拦截器LoginedCheckInterceptor --> <interceptors> <interceptor name="loginedCheck" class="com.anxin.struts.interceptor.LoginedCheckInterceptor"/> <interceptor-stack name="mystack"> <interceptor-ref name="loginedCheck" /> <interceptor-ref name="defaultStack" /> </interceptor-stack> </interceptors> <!-- 定义全局result --> <global-results> <!-- 定义名为exception的全局result --> <result name="exception">exception.jsp</result> <result name="tologin">login.jsp</result> </global-results> <!-- 定义全局异常映射 --> <global-exception-mappings> <!-- 捕捉到Exception异常(所有异常)时跳转到exception所命名的视图上 --> <exception-mapping exception="java.lang.Exception" result="exception"/> </global-exception-mappings> <action name="user_*" class="userAction" method="{1}"> <result name="input">login.jsp</result> <result name="success" type="redirect">student_query.action</result> <interceptor-ref name="mystack" /> </action> <action name="student_*" class="studentAction" method="{1}"> <result name="add">jsp/studentAdd.jsp</result> <result name="update">jsp/studentEdit.jsp</result> <result name="query">jsp/studentList.jsp</result> <result name="success" type="redirect">student_query.action</result> <interceptor-ref name="mystack" /> </action> </package> </struts>
servlet代码:<result name="tologin">LoginServlet</result>
package com.chinacache.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class LoginServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");out.println("<HTML>");out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");out.println("<script type='text/javascript'>");out.println("function init(){" +"var url='http://'+document.location.host;" +"parent.location.replace('http://'+document.location.host+'/login.jsp');}");
//parent.location.replace()意思是:父窗体的地址栏替换为指定urlout.println("</script>");out.println(" <BODY onload='init();'>");out.println("<font color='red'>会话已过期,请从新登录</font>");out.println(" </BODY>");out.println("</HTML>");out.flush();out.close();}}
- struts2 session过期或无操作时自动返回登录
- session过期 ajax访问不能返回登录页面问题
- Struts2的Session超时返回登录页面
- session过期后自动跳转到登录页面
- session自动过期
- IHttpModule实现SESSION过期时弹出登录框
- Java中解决(extjs或jquery)session过期退出登录问题
- Java中解决(extjs或jquery)session过期退出登录问题
- session过期后,如何让框架结构自动返回登陆界面问题
- flex(替代session过期)用户长时间不操作要求重新登录的处理
- flex(替代session过期)用户长时间不操作要求重新登录的处理
- 防止重复登录和session过期
- session过期之后 登录页跳出ifame
- 防止重复登录和session过期
- ecshop登录超时、session过期的解决办法
- Android处理登录的session过期
- django 登录和session过期跳转
- session过期,iframe跳转出登录界面
- linux下运行netca不能启动监听
- C++/mfc错误总结
- 51单片机的复位电路原理
- hdu 3642 Get The Treasury(扫描线、立方体交)
- 字符串的一些处理
- struts2 session过期或无操作时自动返回登录
- 一些iphone 开源项目
- NeHe学习之基础二
- Sip基础四
- SpringMVC实战
- POJ 3268 Silver Cow Party(Dijkstra)
- linux tr命令详解
- C/C++--定义二维数组及二维数组的传递
- 查询成绩