1.在Struts2自定义拦截器有三种方式:

  -->实现Interceptor接口

public class QLInterceptorAction implements  Interceptor{
private static final long serialVersionUID = 1L;
public void destroy() {
}
public void init() {}
public String intercept(ActionInvocation arg0) throws Exception {
return null;
}
}

  -->继承AbstractInterceptor类

    public class QLInterceptorAction extends AbstractInterceptor{
public String intercept(ActionInvocation arg0) throws Exception {
return null;
}}

  -->继承MethodFilterInterceptor类

  public class QLInterceptorAction extends MethodFilterInterceptor {}

---------------------------------------------------------------------------------------------------------------------------------

登录实例:

      获取username等                                                                                                        (判断是否有session)

  1.login.jsp--------------->2.Action类(将用户登录的userName设置在Session中)----------------->3.实现拦截器------------->4.配置struts.xml(配置拦截器,看那些action需要拦截,那些不需要拦截)

执行流程:action请求--->看是执行自定义拦截器--->假如执行,到拦截器中判断.---->如果通过,继续执行,否则,返回一个结果,例如:session中username==null;则返回登录页面

                      --->假如不执行,到Action类,执行具体的业务请求.

具体代码如下:

1.Action类:

public String execute() throws Exception {
System.out.println("LoginAction.execute()");
if(username!=null){
//将username设置到Session中
ActionContext.getContext().getSession().put("username", username);
}
return SUCCESS;
}

2.拦截器类的具体实现:

public class QLInterceptorAction extends MethodFilterInterceptor {
private static final long serialVersionUID = 1L;
String name123; //获取配置里设置的参数,启动服务器就会加载
//这是的方法是struts.xml配置里的param里name属性的setter方法
public void setExcluedeMethodNames(String names) {
//此处的names为userinfo,不需要拦截
/*String[] split = names.split(",");
System.out.println(Arrays.toString(split));
cludeActionNames = Arrays.asList(names.split(","));
System.out.println("------"+cludeActionNames);*/
this.name123=names;
} protected String doIntercept(ActionInvocation ac) throws Exception {
//通过代理获取到ActionName
String actionName = ac.getProxy().getActionName();
//获取到session里的username
String username = (String) ac.getInvocationContext().getSession().get("username");
//如果actionName=userinfo,那么继续执行
if(name123.equals(actionName)){
return ac.invoke();
}
//如果username==null,那么返回到登录页面
if (username == null || "".equals(username)) {
return "notlogin";
}
return ac.invoke();
}
}

3.struts.xml配置:

<struts>
<include file="struts-default.xml"></include> <package name="interceptorencode" extends="struts-default"> <!-- 设置拦截器 -->
<interceptors>
<interceptor name="userinfos" class="com.struts.interceptoraction.QLInterceptorAction">
<!-- 通过配置的形式向拦截器中传递参数 -->
<param name="excluedeMethodNames">userinfo</param> </interceptor>
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="userinfos"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 默认执行拦截器 -->
<default-interceptor-ref name="myStack"></default-interceptor-ref>
<!-- 全局视图结果 -->
<global-results>
<result name="notlogin">/login.jsp</result>
</global-results>
<action name="userinfo" class="com.struts.interceptoraction.LoginAction" >
<result>/JSP/NewFile.jsp</result>
</action> </package>
</struts>

Struts2自定义拦截器Interceptor以及拦截器登录实例的更多相关文章

  1. struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo

    理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...

  2. 12.Struts2自定义拦截器

    12.自定义拦截器        拦截器是Struts2的一个重要特性.因为Struts2的大多数核心功能都是通过拦截器实现的. 拦截器之所以称之为“拦截器”,是因为它可以拦截Action方法的执行, ...

  3. 【Java EE 学习 35 下】【struts2】【struts2文件上传】【struts2自定义拦截器】【struts2手动验证】

    一.struts2文件上传 1.上传文件的时候要求必须使得表单的enctype属性设置为multipart/form-data,把它的method属性设置为post 2.上传单个文件的时候需要在Act ...

  4. Struts2自定义拦截器

    1. 需求 自定义拦截器实现,用户登录的访问控制. 2. 定义拦截器类 public class LoginInterceptor extends AbstractInterceptor { @Ove ...

  5. struts2拦截器interceptor的三种配置方法

    1.struts2拦截器interceptor的三种配置方法 方法1. 普通配置法 <struts> <package name="struts2" extend ...

  6. 5、Struts2自定义拦截器

    一.拦截器相关知识 1.Struts2框架剖析 Holly版本生活案例: 影视公司(拍电影)    ActionMapper 传媒公司(包装明星) ActionMapping 明星           ...

  7. Struts2第七篇【介绍拦截器、自定义拦截器、执行流程、应用】

    什么是拦截器 拦截器Interceptor-..拦截器是Struts的概念,它与过滤器是类似的-可以近似于看作是过滤器 为什么我们要使用拦截器 前面在介绍Struts的时候已经讲解过了,Struts为 ...

  8. Struts2自定义拦截器处理全局异常

    今天在整理之前的项目的时候想着有的action层没有做异常处理,于是想着自定义拦截器处理一下未拦截的异常. 代码: package cn.xm.exam.action.safeHat; import ...

  9. Struts2学习:interceptor(拦截器)的使用

    对于需要登陆验证.权限验证等功能的网站,每一次请求,每一个action都写一段验证的代码,未免显得冗余且不易维护.struts2提供了拦截器interceptor,为这些页面提供一个切面,或者说公共组 ...

随机推荐

  1. python3 入门基础

    1.查看python版本 python -V 2.指定python文件的编码格式 # -*- coding: utf-8 -*- 3.变量命名以字母和下划线(_)开始 _num num 4.注释 # ...

  2. 使用Intent创建Tab页面

    前面已经介绍了如何使用TabActivity来创建Activity布局,前面添加Tab页面使用了TabHost.TabSpec如下方法. setContent(int viewId):直接将指定Vie ...

  3. PWM(脉宽调制)——LED特效呼吸灯设计

    简述PWM PWM--脉宽调制信号(Pulse Width Modulation),它利用微处理器的数字输出来实现,是对模拟电路控制的一种非常有效的技术,广泛应用于测量.通信.功率控制与变化等许多领域 ...

  4. java中数组的排序,直接排序,冒泡排序,插入排序

    1.直接排序: public static void selectSort(int[] arr) { for (int x = 0; x < arr.length - 1; x++) { for ...

  5. SPI在linux3.14.78 FS_S5PC100(Cortex A8)和S3C2440上驱动移植(deep dive)

    由于工作的原因,对SPI的理解最为深刻,也和SPI最有感情了,之前工作都是基于OSEK操作系统上进行实现,也在US/OS3上实现过SPI驱动的实现和测试,但是都是基于基本的寄存器操作,没有一个系统软件 ...

  6. ArcGIS 网络分析[1] 介绍与博文目录【更新中】

    网络分析是个热点,理论上是属于计算机图形学和数据结构的,GIS以此为基础做出应用. 以下列举本人在学习中遇到的网络分析问题与经验总结. 平台:Windows 10操作系统,ArcGIS for Des ...

  7. [TensorFlow] Basic Usage

    Install TensorFlow on mac Install pip # Mac OS X $ sudo easy_install pip $ sudo easy_install --upgra ...

  8. JAVA_file(1)

    1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:xyz est.txt 代表了test.txt文件的绝对路径.http://www.s ...

  9. imageNamed 与 initWithContentsOfFile 区别

    1.imageNamed: UIImage *image = [UIImage imageNamed:"]; UIImage的类方法 第一次读取图片的时候,先把这个图片放到缓存中,下次再使用 ...

  10. Python学习--17 进程和线程

    线程是最小的执行单元,而进程由至少一个线程组成.如何调度进程和线程,完全由操作系统决定,程序自己不能决定什么时候执行,执行多长时间. 进程 fork调用 通过fork()系统调用,就可以生成一个子进程 ...