首页 > 代码库 > Strust2中,加入监听器来判断用户是否在session中存在。
Strust2中,加入监听器来判断用户是否在session中存在。
Strust2中,加入监听器来判断用户是否在session中存在。
struts2拦截器流程:
web.xml中,struts2设置拦截*.action ,当用户访问某一个action中,会行执行它的默认拦截器再执行action中的方法。
拦截器实现原理:
大部分时候,拦截器方法都是通过代理的方式来调用的。Struts2的拦截器实现相对简单。当请求达到struts2的 servletDispatcher时,Struts2会查找配置文件,并根据其配置实例相对的拦截器对象,然后串成一个列表(list),最后一个一个调用列表中的拦截器。
第一步:
先写一个拦截器的类:UserFilter.Java,继承 AbstractInterceptor,只要实现intercept方法。
首先来说,拦截器不能拦截登陆的action。所以要对LoginAction过滤
Object action = actionInvoction.getAction(); //获得拦截器对象
//如果获得的拦截器为Login或者LoginAction,则不进行拦截
if(action instanceof Login || action instanceof LoginAction){
return actionInvocation.invoke();
}
//确认session中用户是否存在
Map session = actionInvoction.getInvocationContext().getSession();
String login = (String) session.get("admin");
//如果用户不为空,则退出拦截。否则跳入LOGIN
if(login != null && login.length() > 0){
return actionInvocation.invoke();
} else {
return Action.LOGIN;
}
第二步:在struts.xml中写入相应的配置信息
在<package 下面写入拦截器配置
<interceptors>
<interceptor name = "loginFilter" class = "com.woheni.filter.UserFilter"/> 拦截器名、拦截器实现类
一下为定义拦截器栈
<intercepter-stack name="teamwareStack"> 拦截器栈名
<interceptor-ref name="loginFilter"/> 拦截器一 (和拦截器名相同)
<interceptor-ref name="defaultStack"/> 拦截器二 这里再引用系统的默认拦截器工作
</interceptor-stack>
</interceptors>
<!--定义默认拦截器-->
<default-intercepotr-ref name="teamwarStack"/>
设置全局返回值
<global-results>
<result name="login">/Login.html</result>
</global-results>
对应关系: 定义默认拦截器 --> 拦截器栈名 --> 拦截器一 --> 自定义拦截器名--class路径
Strust2中,加入监听器来判断用户是否在session中存在。