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. 在vue-cli项目中安装node-sass

    1,使用save会在package.json中自动添加. ----npm install node-sass  --save ----npm install sass-loader  --save 2 ...

  2. 天兔(Lepus)监控系统慢查询分析平台安装配置

    被监控端要安装pt工具 [root@HE1~]## yum -y install perl-IO-Socket-SSL [root@HE1~]## yum -y install perl-DBI [r ...

  3. 有关extdelete恢复测试

    客户意外rm掉了数据文件,导致数据库无法打开,由于没有完整的备份和归档,需要使用别的方法,而客户又关闭了数据库,导致无法使用文件描述符恢复,就要使用linux上别的方法了,现记录使用extundele ...

  4. python访问sqlserver

    #coding=utf-8 #!/usr/bin/env python#---------------------------------------------------------------- ...

  5. 使用 GitHub, Jekyll 打造自己的免费独立博客

    使用 GitHub, Jekyll 打造自己的免费独立博客 GitHub是一个代码托管网站,现在很多开源项目都放在GitHub上. 利用GitHub,可以让全球各地的程序员们一起协作开发.GitHub ...

  6. 我的小工具开源一下-PingTest

    v博客前言 先交代下背景,最近我们项目组的网络真是太渣了,时常remote不了另外一个地方的机器,过个几分钟就断开连接,太烦躁了,严重影响工作心情...于是想着做个工具记录下每天的断开remote连接 ...

  7. js制作ppt阅读文档类型

    前几天开发中,客户要求在页面中展示一个类似ppt文档的一个东西,用轮播展示,但是有缩略图,和展示的大图,本想找些插件来做,后来想想,自己试下吧.. 有些简陋,但是能用,毕竟一行一行写的,留下来当笔记用 ...

  8. 分享一个基于thrift的java-rpc框架

    简单介绍 这是一个简单小巧的Java RPC框架,适用于Java平台内.为系统之间的交互提供了.高性能.低延迟的方案.适合在集群数量偏少的情况下使用(50台以下集群环境).当然.它也可以在大型集群环境 ...

  9. Intellij IDEA 建立文件夹目录问题

    问题: NEW一个package常出现文件夹层次问题 解决: 1.选中当前文件夹(要在该文件夹下添加): 2.右击此处: 3.添加即可. 链接:http://stackoverflow.com/que ...

  10. IOS网络请求之AFNetWorking 3.x 使用

    前言: 计划把公司的网络请求与业务解耦,所以想着学习一下网络请求,最近学习了NSURLSession,今天来学习一下基于NSURLSession封装的优秀开源框架AFNetWorking 3.x,之前 ...