struts2--实现自定义拦截器
前言:
本篇文章,我想说清实现拦截器的办法,还有为什么要这样做:
目录:
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
struts2--实现自定义拦截器的更多相关文章
- struts2基础——自定义拦截器
一.自定义拦截器 默认的拦截器能实现的功能是有限的,Struts2 支持自定义拦截器. 二.拦截器类 1.实现 Interceptor 接口 2.继承 AbstractInterceptor 抽象类, ...
- Struts2透过自定义拦截器实现登录之后跳转到原页面
Struts2通过自定义拦截器实现登录之后跳转到原页面 这个功能对用户体验来说是非常重要的.实现起来其实很简单. 拦截器的代码如下: package go.derek.advice; import g ...
- 【struts2】自定义拦截器
1)什么是自定义的拦截器 所谓自定义的拦截器,就是由我们自己定义并实现的拦截器,而不是由Struts2定义好的拦截器.虽然Struts2的预定义拦截器已经满足了大多数情况的需要.但在有些时候,我们可能 ...
- struts2 的自定义 拦截器
Struts2的 拦截器: 对于拦截器,Struts2官方给出的 定义是: 拦截器是动态拦截Action调用的对象.它提供了一种机制,使开发者可以定义一段代码,在Action执行之前或者之后被调用执行 ...
- struts2基础---->自定义拦截器
这一章,我们开始struts2中拦截器的学习. 自定义拦截器
- Struts2笔记——自定义拦截器
需要两个步骤,自定义类实现拦截器接口和在struts.xml注册拦截器 =============================== 1.自定义类实现com.opensymphony.xwork2. ...
- Struts2使用自定义拦截器导致Action注入参数丢失、url参数
写struts2项目时发现前台超链接中的参数无法传到action, 所有带有传递参数的均无法正常使用了,在Action中所有的参数无法被注入. 后来经过debug发现其中的页面都要先经过拦截器,而后再 ...
- 【Struts2】自定义拦截器interceptors
下面给一张图片表示Struts2拦截器的处理流程. 通过这个流程图,我们可以看出一个完整的请求大概的过程为: 请求 -->filter 控制器 --> 拦截器 1/ 拦截器 2--> ...
- struts2自定义拦截器与cookie整合实现用户免重复登入
目的:测试开发时,为了减少用户登入这个繁琐的登入验证,就用struts2做了个简单的struts2拦截器,涉及到了与cookie整合,具体的看代码 结构(两部份)=struts2.xml+自定义拦截器 ...
- 12.Struts2自定义拦截器
12.自定义拦截器 拦截器是Struts2的一个重要特性.因为Struts2的大多数核心功能都是通过拦截器实现的. 拦截器之所以称之为“拦截器”,是因为它可以拦截Action方法的执行, ...
随机推荐
- mysql数据库表结构与表约束
表结构操作: 添加单列:alter table tb_name add [column] col_name 添加一列: alter table `sudty` add `aaa` int; 添加多列: ...
- Gradient Boosted Regression
3.2.4.3.6. sklearn.ensemble.GradientBoostingRegressor class sklearn.ensemble.GradientBoostingRegress ...
- 蓝桥杯模拟赛-引爆炸弹-DFS+并查集
今天整理电脑,翻出来了很久以前大佬给的题,贴一下. 引爆炸弹 1000ms 在一个 n×m的方格地图上,某些方格上放置着炸弹.手动引爆一个炸弹以后,炸弹会把炸弹所在的行和列上的所有炸弹引爆,被引爆的炸 ...
- BZOJ3930: [CQOI2015]选数
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3930 容斥原理. 令l=(L-1)/k,r=R/k,这样找k的倍数就相当于找1的倍数. 设F[ ...
- Centos7环境搭建lnmp环境
[原创]编译安装lnmp环境 准备软件:nginx1.10.3+php-5.5.12+mariadb10.0.8(数据库在此使用的yum安装) 如果需要编译安装的可以给我留言,我后续再发布出来! 依赖 ...
- JAVA爬虫实践(实践三:爬虫框架webMagic和csdnBlog爬虫)
WebMagic WebMagic是一个简单灵活的Java爬虫框架.基于WebMagic,你可以快速开发出一个高效.易维护的爬虫. 采用HttpClient可以实现定向的爬虫,也可以自己编写算法逻辑来 ...
- word文档自动生成方法
创建word文档需要几个接口类,常用application,document,documents,selection等.但word的功能复杂,要认识到每一个类的功能是不可能的.常用的方法是在word的 ...
- HDU 2243 Knight Moves
题目: A friend of you is doing research on the Traveling Knight Problem (TKP) where you are to find th ...
- visual studio 打开微软MVC3示例MvcMusicStore的详细修改方法
1.官方下载地址:http://mvcmusicstore.codeplex.com/ 2.直接打开项目后,引用中会有三个dll文件报错,分别是System.Web.MVC;System.Web.He ...
- Spark算子--partitionBy
转载请标明出处http://www.cnblogs.com/haozhengfei/p/923b11fce561e82748baa016bcfb8421.html partitionBy--Trans ...