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. Intent对象详解——使用Intent启动系统组件

    Android的应用程序包含三种重要组件:Activity.Service.BroadcastReceiver,应用程序采用一致的方式来启动它们——都是依靠Intent来启动的,Intent就封装了程 ...

  2. Python抓取百度百科数据

    前言 本文整理自慕课网<Python开发简单爬虫>,将会记录爬取百度百科"python"词条相关页面的整个过程. 抓取策略 确定目标:确定抓取哪个网站的哪些页面的哪部分 ...

  3. for语句输出图形

    一.输出以下图形 ******************************** 用for...for...嵌套循环,内循环控制每一行的个数(即列数),外循环控制行数 class ForDraw { ...

  4. Sass与Compass——回顾

    compass 是sass的一个工具库 compass在sass 的基础上封装了一系列有用的模块,用来补充和丰富sass的工能, 安装: compass是用 ruby语言开发的,所以安装它之前必须安装 ...

  5. uml系列图(一)——与uml的第一次约会

    uml视频终于开始看了,再看之前先大概了解了一下uml都有啥. 老规矩,有图有真相: 暂时的理解就这么多,等到uml看完的时候总结跟现在这张图比一下,应该是有很大的区别吧. uml是一种可视化的建模语 ...

  6. SQL语句的优化建议

    重中之重---语句执行顺序   我们先看看语句的执行顺序 如果我没记错这是<SQL SERVER 2005技术内幕--查询>这本书的开篇第一章第一节.书的作者也要让读者首先了解语句是怎么样 ...

  7. c++编程思想(二)--对象的创建和使用

    1.解释器:将源码转换为动作(机器语言),并立即执行 编译器:编译器也会将源码转换为机器语言,但是中间会经过好多步骤,分段编译 ,然后链接,可以实现将代码模块化 2.c++不鼓励多使用预处理命令 3. ...

  8. [Netty] - Netty入门(最简单的Netty客户端/服务器程序)

    Java中的NIO是一种解决阻塞式IO问题的基本技术,但是NIO的编写对java程序员是有比较高的要求的.那么Netty就是一种简化操作的一个成熟的网络IO编程框架.这里简单介绍一个程序,代码是< ...

  9. [solr] - solr5.2.1环境搭建 - 使用tomcat做为容器

    这里忽略solr其他依赖环境的搭建,这里搭建solr5.2.1.使用Java1.7.0_17,tomcat使用6.0.36版本的. 1.下载solr压缩文件 Solr是Apache基金组织在lucen ...

  10. selenium框架与chrome浏览器的不兼容问题

    在一次偶然的情况下,在chrome上用selenium框架去抓取某个id为XX的页面元素,使用WebDriver的findElement().click()方法进行点击,原来在firefox浏览器运行 ...