标签:j2ee struts2 interceptor 拦截器
几乎每个J2EE的项目都会涉及用户模块,只要涉及到就有用户登陆登出及其session的一些管理和判断,我以前也写过很多关于这方面的代码,只是写但没做总结,今天就做一次简单的总结,也方便新人学习或者借鉴.好了废话不多说,言回正题.
今天主要是讲解的是struts2对session的判断和拦截.
首先我们在struts的xml配置文件写入拦截器的配置信息,如下:
<package name="struts2" namespace="/" extends="struts-default"> <!-- 定义一个拦截器 --> <interceptors> <!-- 权限拦截器 <interceptor name="authority" class="com.smartsoft.interceptor.AuthorityIterceptor"> </interceptor> --> <!-- session拦截器--> <interceptor name="sessionout" class="com.smartsoft.interceptor.SessionIterceptor"></interceptor> <!-- 拦截器栈 --> <interceptor-stack name="mystack"> <interceptor-ref name="defaultStack" /> <!-- 权限拦截 <interceptor-ref name="authority" /> --> <!-- session拦截--> <interceptor-ref name="sessionout" /> </interceptor-stack> </interceptors> <!-- 定义全局Result --> <global-results> <!-- 当返回login视图名时,转入/login.jsp页面 --> <result name="toLogin">/login.jsp</result> </global-results> </package>
package com.smartsoft.interceptor; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; import com.smartsoft.model.User; import com.smartsoft.util.Constants; public class SessionIterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation actionInvocation) 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 loginUser = null; //对登录与注销请求直接放行,不予拦截 if (url.indexOf("login")!=-1 || url.indexOf("logout")!=-1){ return actionInvocation.invoke(); } else{ //验证Session是否过期 if(!ServletActionContext.getRequest().isRequestedSessionIdValid()){ //session过期,转向session过期提示页,最终跳转至登录页面 System.out.println("session过期"); return "toLogin"; } else{ loginUser = (User)ServletActionContext.getRequest().getSession().getAttribute(Constants.USER_SESSION); //验证是否已经登录 if (loginUser==null){ //尚未登录,跳转至登录页面 return "toLogin"; }else{ return actionInvocation.invoke(); } } } } }
以上只是拦截器的整定义过程,何如才能把他运用到我们需要的连接上呢?具体还需要在每个struts的action上加上如下配置才可以,比如
<package name="db" namespace="" extends="struts2"> <action name="index" method="index" class="com.smartsoft.action.IndexAction"> <result>/index.jsp</result> <interceptor-ref name="mystack" /> </action> <action name="login" method="login " class="com.smartsoft.action.IndexAction"> <result type="redirect">index</result> <interceptor-ref name="mystack" /> </action> </package>
<interceptor-ref name="mystack" />
标签:j2ee struts2 interceptor 拦截器
原文地址:http://blog.csdn.net/qq183293/article/details/44955783