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路径

转载于:https://www.cnblogs.com/fg-fd/p/7264407.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值