Struts自定义拦截器

 

1:在你的struts的xml配置文件里面配置你你的拦截器

 

 <!-- session超时拦截器 -->
 <package name="iterceptor" namespace="/" extends="struts-default">
  <interceptors>
   <!-- 自定义拦截器                class是需要自己定义配置的,下面会有解释-->
   <interceptor name="permission" class="sessionIterceptor" />

   <interceptor name="accessControl" class="accessControlIterceptor" />
   <!-- 配制默许的拦截器到拦截器栈 -->
   <interceptor-stack name="permissionStack">
    <!-- 此处先后顺序没影响,这里是引用上面的interceptor name 。-->
    <interceptor-ref name="permission" />
   <!--  <interceptor-ref name="accessControl" /> -->
    <interceptor-ref name="defaultStack" />
   </interceptor-stack>

  </interceptors>

 

  <!-- 配置默认的拦截器 ,permissionStack是struts自带的-->
  <default-interceptor-ref name="permissionStack" />
  <!-- 全局变量,超时返回登录页面 -->
  <global-results>
   <result name="loginPage">
    /WEB-INF/pages/common/session.jsp
   </result>
  </global-results>

 </package>

 

 

2:在你的struts,bean的配置文件里面,配置上述两个自定义class

 <!-- 自定义过滤器类 -->
 <bean name="sessionIterceptor"
  class="com.onecom.onecomframework.utils.iterceptor.SessionIterceptor">
  <!-- <property name="service" ref="loginAndQuitService"></property> -->
 </bean>

 <!-- 权限控制拦截器
 <bean name="accessControlIterceptor"
  class="com.onecom.onecomframework.utils.iterceptor.AccessControlIterceptor">
 </bean>
 -->

 

3:编辑自定义class,校验session是否过期,过期的判断是session里面的用户名和密码为空

package com.onecom.onecomframework.utils.iterceptor;

import com.onecom.amp.system.common.web.action.LoginAndQuitAction;
import com.onecom.onecomframework.utils.tools.StringUtils;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

/**
 * session校验拦截器类
 *
 * @author tangx
 * @version V100 2013-4-14
 * @see [相关类/方法]
 * @since ONECOMTECH.COM V100R001C00
 *
 */
public class SessionIterceptor extends AbstractInterceptor {

    /**
     * 属性serialVersionUID
     */
    private static final long serialVersionUID = 1L;

    /**
     * service层,超时退出时修改登录状态和记录退出时间
     * 此方法覆盖父类的方法
     *
     * @see com.opensymphony.xwork2.interceptor.AbstractInterceptor#intercept(com.opensymphony.xwork2.ActionInvocation)
     */
    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
 // 过滤掉登录/退出请求
 Action action = (Action) invocation.getAction();

 if (action instanceof LoginAndQuitAction) {
     return invocation.invoke();
 }

 // 校验session是否已被清空
 ActionContext ctx = invocation.getInvocationContext();
 String userName = (String) ctx.getSession().get("userName");
 String loginSeriaId = (String) ctx.getSession().get("loginSeriaId");
 if (!StringUtils.isEmpty(userName)
  || !StringUtils.isEmpty(loginSeriaId)) {
     return invocation.invoke();//如果session不为空的话,那就继续做后续的事情,返回各自action里面的东西
 }

   return "loginPage";     // 如果session为空的话,直接返回登录界面,这个是在global-results里面配置的
    }

}

 

4:最后把<global-results>的代码贴上来

<html>
 <head>
  <script type="text/javascript">
   alert("您本次登录操作已超时,请重新登录!");
   window.top.location.href="/onecom/login.jsp";      //链接到你自己的登录界面就OK了。onecom为我自己的工程名,
  </script>
 </head>
</html>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值