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. No curses/termcap library found

    CentOS6.5中编译Mysql时遇见如下错误 error: No curses/termcap library found checking for tgetent in -lncurses... ...

  2. c#使用DotNetZip封装类操作zip文件(创建/读取/更新)实例

    DotnetZip是一个开源类库,支持.NET的任何语言,可很方便的创建,读取,和更新zip文件.而且还可以使用在.NETCompact Framework中.  下载地址在这里:http://dot ...

  3. 超棒的30款JS类库和工具

    http://www.csdn.net/article/2013-07-01/2816068-best-javascript-libraries-and-tools

  4. Pomelo框架

    一个典型的多进程MMO运行架构, 如下图所示: pomelo框架的组成如图所示: 架构把游戏服务器做了抽象, 抽象成为两类:前端服务器和后端服务器, 如图: 前端服务器(frontend)的职责: 负 ...

  5. JSP EL表达式 param、paramValues的使用

    JSP EL表达式 param.paramValues的使用: <%@ page language="java" import="java.util.*" ...

  6. javascript实现页面滚屏效果

    当我们浏览网页的时候,时常会碰到可以滚动屏幕的炫酷网页,今天笔者对这一技术进行简单实现,效果不及读者理想中那般炫酷,主要针对滚屏的技术原理和思想进行分享和分析.本示例在页面右侧有五个数字标签,代表五个 ...

  7. jQuery 判断checkbox是否被选中 4种方法

    下午写JS验证,有一个需求需要判断 checkbox是否被选择,查阅相关资料后,总结以下4种方法,分享给大家. <!DOCTYPE html> <html lang="en ...

  8. 图片上传之FileAPI与NodeJs

    HTML5之fileAPI HTML5之fileAPI使得我们处理图片上传更加简单. 实例 html代码 <div class="form-group"> <la ...

  9. ReentrantLock获取、释放锁的过程

    看了篇文章,觉得分析得很透彻,其后总结的很到位,地址:http://www.iteye.com/topic/1083832 把获取与释放操作串在一起在简单看一下: 获取锁的时候将当前线程放入同步队列, ...

  10. C++ Primer 笔记 第二章

    C++ Primer 第二章 变量和基本类型 2.1基本内置类型 有算数类型和void类型:算数类型储存空间大小依及其而定. 算数类型表: 类型 含义 最小储存空间 bool 布尔型 - char 字 ...