struts2拦截器之用户session判断

几乎每个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>代码所示,我定义了一个名字为struts2的package,里面定义了拦截器interceptors和全局视图的跳转,在拦截器中定义了一个sessionout,便是我们的session判断功能,他指向class如下:

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 {@Overridepublic String intercept(ActionInvocation actionInvocation) throws Exception {//取得请求的URLString 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();}}}} }以上代码逻辑比较简单,获取当前session的用户,并判断他是否存在,以此作为根据判断他是否在登陆状态,是则放行,否则调到实现定义好的登录界面

以上只是拦截器的整定义过程,何如才能把他运用到我们需要的连接上呢?具体还需要在每个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>比如这是我定义的一个登录的xml配置,因为我不是与拦截器写在同一package下的,所以,但我这里需要用到之前的拦截器,需要把当前另起的package继承拦截器所属的package,具体代码在packge的extends填入拦截器的package的name就行了,继承一说罢了,然后再每个需要拦截判断的action里加上这句配置就行了,如果是直接写在拦截器的package就直接用就行了,不存在继承,呵呵

<interceptor-ref name="mystack" />好了,就说到这里吧,不明白的同学或者,有更好的建议可以给我留言,感谢阅读本篇文章,转发请标明出处,谢谢

不要等待机会,而要创造机会。

struts2拦截器之用户session判断

相关文章:

你感兴趣的文章:

标签云: