拦截器介绍

拦截器 的使用 ,源自Spring AOP(面向切面编程)思想

拦截器 采用 责任链 模式

* 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。

* 责任链每一个节点,都可以继续调用下一个节点,也可以阻止流程继续执行

在struts2 中可以定义很多个拦截器,将多个拦截器按照特定顺序 组成拦截器栈 (顺序调用 栈中的每一个拦截器 )

1、 struts2 所有拦截器 都必须实现 Interceptor 接口

2、 AbstractInterceptor 类实现了 Interceptor 接口. 并为 init, destroy 提供了一个空白的实现

所有实际开发中,自定义拦截器 只需要 继承 AbstractInterceptor类, 提供 intercept 方法实现

3、 常用struts2 拦截器

模型驱动

文件上传

参数解析封装

类型转换错误

请求参数校验

拦截跳转 input 视图

自定义拦截器案例

案例 : 登陆,对其它Action访问 通过自定义拦截器 进行权限控制

导入jar包 (struts2 jar、c3p0、 dbutils、 mysql驱动)

web.xml

struts.xml

JDBCUtils 工具类

第一步 : 编写index.jsp 提供 图书增删改查 四个功能

编写BookAction ,提供四个业务方法

第二步: 完成登陆功能

第三步 :必须要登陆 才能进行图书管理

使用Filter 进行权限控制 —- 过滤所有web请求 (所有web资源访问)

使用拦截器 进行权限控制 —- 主要拦截对Action访问 (不能拦截JSP)

定义拦截器 继承AbstractInterceptor

配置拦截器

方式一





















方式二

    <!-- 设置当前包 所有Action 都使用 自定义拦截器栈 -->
    <default-interceptor-ref name="privilegeStack"></default-interceptor-ref>


下面是我自己实现的时候练手的操作

第一个是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.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    <!-- Add packages here -->
    <package name="user" namespace="/" extends="struts-default">
        <interceptors>
            <interceptor name="bookInterceptor" class="com.action.BookInterceptor">
                <param name="includeMethods">add,update,delete</param>
                <param name="excludeMethods">search</param>
            </interceptor>
            <interceptor-stack name="myStack">
                <interceptor-ref name="bookInterceptor"></interceptor-ref>
                <interceptor-ref name="defaultStack"></interceptor-ref>
            </interceptor-stack>
        </interceptors>
        <global-results>
            <result name="login" type="dispatcher">/login.jsp</result>
        </global-results>
        <action name="login" class="com.action.LoginAction">
            <result name="success" type="redirect">/book.jsp</result>
        </action>
        <action name="book*" class="com.action.BookAction" method="{1}">
            <interceptor-ref name="myStack"></interceptor-ref>
        </action>
    </package>
</struts>

需要注意的是

1、struts标签下只能有

Content Model : ((package | include | bean | constant)*, unknown-handler-stack?)

2、

Element : package
Content Model : (result-types?, interceptors?, default-interceptor-ref?, default-action-ref?, default-class-
 ref?, global-results?, global-exception-mappings?, action*)
 Element : interceptors
Content Model : (interceptor | interceptor-stack)+

3、还有就是interceptor的位置,要在action之前

默认的拦截器也不能忘了引入,

在对应的action里面引入拦截器


下面是BookInterceptor.java的内容,定义了拦截器对请求的操作

package com.action;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

public class BookInterceptor extends MethodFilterInterceptor {

    @Override
    protected String doIntercept(ActionInvocation arg0) throws Exception {
        // TODO Auto-generated method stub
        User user = (User) ServletActionContext.getRequest().getSession()
                .getAttribute("user");
        System.out.println("执行了这个拦截器");
        if (user == null) {
            ServletActionContext.getRequest().setAttribute("msg",
                    new String("权限不足,请您先登陆"));
            return Action.LOGIN;
        }
        return arg0.invoke();
    }
}

Struts2拦截器配置实例的更多相关文章

  1. Struts2 拦截器配置以及实现

    @(Java ThirdParty)[Struts|Interceptor] Struts2 拦截器配置以及实现 Struts2的拦截器应用于Action,可以在执行Action的方法之前,之后或者两 ...

  2. Struts2拦截器配置

    1. 理解拦截器 1.1. 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截是AO ...

  3. 转载 - Struts2拦截器配置

    出处:http://blog.csdn.net/axin66ok/article/details/7321430 目录(?)[-] 理解拦截器 1 什么是拦截器 2 拦截器的实现原理 拦截器的配置 使 ...

  4. struts2 拦截器配置

    CheckLoginInterceptor.java---拦截器具体实现类: package com.sunhoo.hcpms.struts2.action.interceptors; import  ...

  5. struts2拦截器配置;拦截器栈;配置默认拦截器;拦截方法的拦截器MethodFilterInterceptor;完成登录验证

    struts2.xml 内容 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts ...

  6. Struts2拦截器配置和使用

    拦截器是Struts2最强大的特性之一,它是一种可以让用户在Action执行之前和Result执行之后进行一些功能处理的机制. 说到拦截器interceptor,就会想到过滤器filter: 过滤器f ...

  7. Struts2 拦截器配置及使用

    在我的项目中有个需求,实现记录用户操作的系统日志,基于这个功能我首先想到的是Struts 的拦截器.配置一个全部Action都会拦截的拦截,写一个公用的服务.每当用户发送请求到Action 就记录相应 ...

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

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

  9. Struts2拦截器原理以及实例

    一.Struts2拦截器定义 1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现. 2. ...

随机推荐

  1. Android - Fragment (三)不同Fragment之间的通信

    在Fragment的java文件中,可以使用getActivity()来获得调用它的activity, 然后再找到另一个Fragment,进行通信 getActivity().getFragmentM ...

  2. (转)java中对集合对象list的几种循环访问总结

    Java集合的Stack.Queue.Map的遍历   在集合操作中,常常离不开对集合的遍历,对集合遍历一般来说一个foreach就搞定了,但是,对于Stack.Queue.Map类型的遍历,还是有一 ...

  3. linux下使用scp远程传输自动输入密码

    由于需要将A服务器的文件 远程传输到B服务器 但是scp命令每次都要手动输入密码 这样脚本执行太繁琐,所以讲A服务器和B服务器互信即可,具体操作如下: 首先在A服务器配置: mkdir -p ~/.s ...

  4. ubuntu下处理mysql无法启动故障一例

    故障现象: mysql无法启动 1: dmesg |grep mysql [101353.820000] init: mysql post-start process (9077) terminate ...

  5. Linux 下安装jetty服务器

    jetty和我们通常使用的tomcat一样,是一个开源的servlet容器,特点是轻量易部署,一方面jetty可以作为web容器使用,另一方面也是最一般的方式是jetty以一组jar包的形式发布,所以 ...

  6. python常用模块(1):collections模块和re模块(正则表达式详解)

    从今天开始我们就要开始学习python的模块,今天先介绍两个常用模块collections和re模块.还有非常重要的正则表达式,今天学习的正则表达式需要记忆的东西非常多,希望大家可以认真记忆.按常理来 ...

  7. ubuntu下安装opencv库+Python2.7环境安装及开发摄像头拍照应用

    好久没有更新了,今天更一篇最近遇到的问题,及解决办法,后面博客得继续写起来 安装 #使用Python下的lib库直接进行安装 apt-get install python-opencv 测试 #使用如 ...

  8. akoj-1222-炸金花

    炸金花 Time Limit:1000MS  Memory Limit:65536K Total Submit:40 Accepted:19 Description 炸金花是一个风靡全球的扑克游戏,喜 ...

  9. 自定义MySQL函数

    1.MySQL创建函数语法: CREATE [DEFINER = { user | CURRENT_USER }] FUNCTION sp_name ([func_parameter[,...]]) ...

  10. MAC下的Intellij IDEA常用快捷键

    MAC下的Intellij IDEA常用快捷键 alt+f7 : 查找在哪里使用 相当于eclipse的ctrl+shift+G command+alt+f7 : 这个是查找选中的字符在工程中出现的地 ...