前言:

  本篇文章,我想说清实现拦截器的办法,还有为什么要这样做:

目录:

1.需求目的

2.实现步骤及原理(文字怕描述不清,画图描述)

3.代码

4.总结

一、需求目的

  规范或限制越级访问(例如:一个客户端,没有登录,直接发送了一个修改密码的action请求,或者直接退出系统,这些都可能造成bug,再或者直接访问一些资源文件)

二、实现步骤及原理(画图描述)

  第一步:写自己的拦截器

  

  第二步:配置struts.xml文件

  

三、代码

  第一步:写自己的拦截器

  

package com.catit.tms.filter;

import org.apache.struts2.ServletActionContext;
import com.catit.tms.domain.User;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; /**
* 拦截action
* @author phoebe
*
*/
public class MyActionFilter extends MethodFilterInterceptor{
private static final long serialVersionUID = 1L; @Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
//获取用户是否登录
User user = (User) ServletActionContext.getRequest().getSession().getAttribute("activeUser");
if(user != null){
//已登录放行
return invocation.invoke();
}
//未登录,跳转到登录页面使其登录
return "login";
}
}

第二步:配置struts.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<!-- 开发者模式打开可以提高开发效率,关闭不容易出错: -->
<constant name="struts.devMode" value="false" />
<package name="myStruts" extends="struts-default" namespace="/"> <!-- 拦截器设置 -->
<interceptors>
<!-- 自定义拦截器 -->
<interceptor name="myActionFilter" class="com.catit.tms.filter.MyActionFilter">
<!-- 放行方法名为login的方法 -->
<param name="excludeMethods">login</param>
</interceptor>
<!-- 自定义拦截器栈 -->
<interceptor-stack name="selfStack">
<!-- 必须引用struts-default.xml中的拦截器栈 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 自己的拦截器 -->
<interceptor-ref name="myActionFilter"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 配置全局拦截器为 -->
<default-interceptor-ref name="selfStack"></default-interceptor-ref>
<!-- 全局result -->
<global-results>
<result name="login">${pageContext.request.contextPath}/login.jsp</result>
</global-results> <!-- 需要进行权限控制的页面访问 -->
<action name="page_*_*">
<interceptor-ref name="selfStack"></interceptor-ref>
<result type="dispatcher">/WEB-INF/pages/{1}/{2}.jsp</result>
</action>
<!-- 用户 -->
<action name="user_*" class="userAction" method="{1}">
<result name="success" type="dispatcher">${pageContext.request.contextPath}/WEB-INF/pages/common/index.jsp</result>
</action> </package>
</struts>

四、总结

  1、实现拦截器有很多方法,根据需求不同选择继承或者实现接口也不相同

  2、includeMethods的优先级大于excludeMethods

最新文章

  1. c# 判断当前时间是否在 工作日时间段内
  2. 【阿里云产品公测】消息队列服务MQS java SDK 机器人应用初体验
  3. 常见的Activity Action Intent常量
  4. oracle中的记录类型
  5. RESTLET开发实例(一)基于JAX-RS的REST服务
  6. JS原型函数相关基础知识
  7. Linux2.6内核 -- 编码风格(3)
  8. android 修改背景色(转)
  9. 图的基本算法(BFS和DFS)(转载)
  10. vue.js基础知识篇(1):简介、数据绑定
  11. Linux系统性能分析工具 sar--系统活动情况报告
  12. 51nod 1405 树的距离之和 树形dp
  13. Vue基础之计算属性
  14. tomcat开启自启动
  15. Openlayer3中应用的技术
  16. [转] mongoose 之Shema
  17. Linux下常见音频格式之间的转换方法
  18. javascript 高级程序设计 十一
  19. JoinableQueue---创建可连接的共享进程队列
  20. SQLSERVER 升级版本的方法

热门文章

  1. 前端请求参数MD5加密校验,参数串解密
  2. ZOJ 1403&amp;&amp;HDU 1015 Safecracker【暴力】
  3. AtCoder Regular Contest 076
  4. hihoCoder #1078 : 线段树的区间修改(线段树区间更新板子题)
  5. CodeForces776-A.Serial Killer-string
  6. linux 下CentOS 下 npm命令安装gitbook失败的问题
  7. 久未更 ~ 二之 —— TextView 文字省略
  8. 10年java过来人聊聊自己的自学、培训和工作经历
  9. ADO.NET复习总结(2)--连接池
  10. Oracle问题之ORA-12560TNS:协议适配器错误