拦截器是struts2的核心。拦截器可以拦截请求,控制视图的走向。那么怎么来实现自定义的拦截器呢?

这里我们做一个例子。

首先假现在做了两个jsp页面一个是登陆的信息的(用session来模拟),一个是没有登陆的信息的。

有登陆信息的叫login.Jsp

<%request.getSession().setAttribute("sess","fish" ) ;%>

用户已登录

没有登陆信息的叫做

Quit.JSP

<%request.getSession().removeAttribute("sess"); %>

用户已退出!

然后一个全局视图跳转的jsp页面,message.JSP

${message}

现在定义一个拦截器:MyIntercerptor.Java

packagecom.fish;

importcom.opensymphony.xwork2.ActionContext;

importcom.opensymphony.xwork2.ActionInvocation;

importcom.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class MyInterceptor extends AbstractInterceptor {//继承拦截器的抽象类

@Override

public String intercept(ActionInvocation invokcation) throws Exception {

Object session= ActionContext.getContext().getSession().get("sess");//首先或得这个session对象

if(session!=null)//如果有sess说明用户登陆成功了

return invokcation.invoke();//那么调用这个方法就可以中断这个intercept()方法。那么后面的代码就不会执行了。如果没有sess对象就说明了你没有登陆。那么就执行了下面的方法。这句话就是拦截器的核心。

ActionContext.getContext().put("message", "你没有权限");//设置一个request对象

return "success";//返回这个试图。

}

}

接着我们看看struts2.xml

<package name="fish"namespace="/test" extends="struts-default">

<interceptors>

<interceptor name="my"class="com.fish.MyInterceptor"></interceptor>//首先注册这个拦截器。如果要想拦截器发挥作用只要把拦截器放到action下面,<interceptor-ref name="XXX"/>调用就行了,但是在action只要调用拦截器就不会执行原来的struts自身的拦截器,说以我们定义一个拦截器栈,将系统的拦截器和自定义的拦截放在里面就行了,调用的时候主要吧拦截器栈写名字<interceptor-ref name="xx">。

<interceptor-stack name="aa">//注册一个拦截器栈,

<interceptor-ref name="defaultStack"></interceptor-ref>//一般顺序就是struts自身的拦截器

<interceptor-ref name="my"></interceptor-ref>//然后自定义的拦截器

</interceptor-stack>

</interceptors>

<global-results><result>/message.jsp</result></global-results>

<action name="redfish"  class="com.fish.Test"method="execute">

<result name="success">/message.jsp</result>

<interceptor-ref name="aa"></interceptor-ref>//这里调用的拦截器栈

</action>

</package>

测试结果:

启动服务器。直接

http://127.0.0.1:8080/struts2test7/test/redfish

这样的话会显示:“权限不够”,显然是因为拦截器已经起作用了。因为开始session没有赋值

如果: http://127.0.0.1:8080/struts2test7/login.jsp

然后:http://127.0.0.1:8080/struts2test7/test/redfish

这样会显示:“你好”,因为这样session就有了。有了session就相当于有权限,拦截器就不会拦截了,可以自由访问action的试图。

struts2对拦截器使用带实例的更多相关文章

  1. Struts2自定义拦截器Interceptor以及拦截器登录实例

    1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor ...

  2. Struts2【拦截器】就是这么简单

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

  3. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

  4. struts2总结六: Struts2的拦截器

    一.Struts2的系统结构图

  5. Struts2使用拦截器完成权限控制示例

    http://aumy2008.iteye.com/blog/146952 Struts2使用拦截器完成权限控制示例 示例需求:    要求用户登录,且必须为指定用户名才可以查看系统中某个视图资源:否 ...

  6. JavaWeb框架_Struts2_(三)---->Struts2的拦截器

    2. Struts2的拦截器(使用拦截器实现权限控制) 2.1 拦截器的概述 拦截器是Struts2的核心组成部分,它可以动态的拦截Action调用的对象,类似与Servlet中的过滤器.Struts ...

  7. 通俗易懂之SpringMVC&Struts2前端拦截器详解

    直接进入主题吧!一,配置Struts2的拦截器分两步走1配置对应的拦截器类:2在配置文件Struts.xml中进行配置拦截器同时在Strust2中配置拦截器类有三种方法1实现Interceptor接口 ...

  8. 【跟我一步一步学Struts2】——拦截器

    前言 前面提到过拦截器.而且说拦截器仅仅能拦截Action.这里拦截器的调用体现了责任链模式.为什么说体现了责任链模式呢? 以下的一段话说的非常明确: Struts2将整个运行划分成若干同样类型的元素 ...

  9. 谈谈 Struts2 的拦截器

    套话 相信非常多人都用过 Struts2 了,当然,对 Struts2 的原理也都比較了解.之前在一个项目中就已经用到了,当初的理解也不过局限在应用的层面上,对于更深层次的原理.机制,了解的并非非常多 ...

随机推荐

  1. CF 983B 序列函数

    CF 983B 序列函数 一道本校神仙wucstdio出的毒瘤签到题. 题意: 给你一段序列,求出它们的最大异或和. 解法: 其实这道题并不很难,但读题上可能会有困难. 其实样例我是用Python 3 ...

  2. 命令行执行Django脚本

    命令行执行Django脚本 - #效仿manage.py加入的环境变量在脚本的文件加入 - #手动注册django所有的APP import sys,os ---------------------- ...

  3. FZU 1901 Period II(KMP循环节+公共前后缀)

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=1901 题目大意:题目大意求出所有p满足s[i]=s[i+p](i<=len-p) 解题思路: 其实就是要 ...

  4. Java OOM学习

    转载自原文: 什么是java OOM?如何分析及解决oom问题? 什么是OOM? OOM,全称"Out Of Memory",翻译成中文就是"内存用完了",表现 ...

  5. 如何使用 JMeter 调用你的 Restful Web Service?进行简单的压力测试和自动化测试

    表述性状态传输(REST)作为对基于 SOAP 和 Web 服务描述语言(WSDL)的 Web 服务的简单替代,在 Web 开发上得到了广泛的接受.能够充分证明这点的是主流 Web 2.0 服务提供商 ...

  6. CF 248B 前缀和

    操作1 l r 是原序列l-r的和操作2 l r 是从小到大排序后的l-r的和 input66 4 2 7 2 732 3 61 3 41 1 6output24928 # include <i ...

  7. day1作业二:多级菜单操作(函数实现)

    作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入back返回上一层,输入quit退出整个程序 本示例的三级菜单是一个yaml文件格式,格式如下 ...

  8. 【LOJ】#2672. 「NOI2012」魔幻棋盘

    题解 代码7.1KB,人傻代码长 恶心死我了这代码真的把我写恶心了= = 想一想就知道这个东西--维护到中心的差分,然后用二维线段树维护一下矩形的gcd 嗯,我说完了,你写吧. 首先这个二维线段树的单 ...

  9. 43:n个骰子的点数

    算法分析: 算法1.基于递归求色子点数,时间效率不高 现在我们考虑如何统计每一个点数出现的次数.要向求出n个骰子的点数和,可以先把n个骰子分为两堆:第一堆只有一个,另一个有n-1个.单独的那一个有可能 ...

  10. 20172301 《Java软件结构与数据结构》实验一报告

    20172301 <Java软件结构与数据结构>实验一报告 课程:<Java软件结构与数据结构> 班级: 1723 姓名: 郭恺 学号:20172301 实验教师:王志强老师 ...