struts2--实现自定义拦截器
2024-10-18 23:29:16
前言:
本篇文章,我想说清实现拦截器的办法,还有为什么要这样做:
目录:
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
最新文章
- c# 判断当前时间是否在 工作日时间段内
- 【阿里云产品公测】消息队列服务MQS java SDK 机器人应用初体验
- 常见的Activity Action Intent常量
- oracle中的记录类型
- RESTLET开发实例(一)基于JAX-RS的REST服务
- JS原型函数相关基础知识
- Linux2.6内核 -- 编码风格(3)
- android 修改背景色(转)
- 图的基本算法(BFS和DFS)(转载)
- vue.js基础知识篇(1):简介、数据绑定
- Linux系统性能分析工具 sar--系统活动情况报告
- 51nod 1405 树的距离之和 树形dp
- Vue基础之计算属性
- tomcat开启自启动
- Openlayer3中应用的技术
- [转] mongoose 之Shema
- Linux下常见音频格式之间的转换方法
- javascript 高级程序设计 十一
- JoinableQueue---创建可连接的共享进程队列
- SQLSERVER 升级版本的方法
热门文章
- 前端请求参数MD5加密校验,参数串解密
- ZOJ 1403&;&;HDU 1015 Safecracker【暴力】
- AtCoder Regular Contest 076
- hihoCoder #1078 : 线段树的区间修改(线段树区间更新板子题)
- CodeForces776-A.Serial Killer-string
- linux 下CentOS 下 npm命令安装gitbook失败的问题
- 久未更 ~ 二之 —— TextView 文字省略
- 10年java过来人聊聊自己的自学、培训和工作经历
- ADO.NET复习总结(2)--连接池
- Oracle问题之ORA-12560TNS:协议适配器错误