struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo

时间:2022-12-16 12:52:38
  •  理解  

    Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起组成一个栈.

    拦截器是一种AOP(面向切面编程)思想的编程方式.它提供一种机制是开发者能够把相对独立的代码抽离出来,配置到Action前后执行.

    Struts2拦截器,每个拦截器只有一个对象实例,属于单例模式,struts2核心功能都是通过拦截器来实现的.

  •  作用

    对action的一些公共处理代码可以放到拦截器中实现,比如权限控制,日志.

  •  执行流程

struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo

  • 实现步骤

  1.   编写拦截器(实现interceptor接口或继承AbstractInterceptor抽象类即可, )
  2.   在struts.xml中配置拦截器
  3.   在action中使用拦截器

下面写一个自定义拦截器的例子,判断用户是否登录,就是检查当前用户的session中的user属性是否为空,如果为空,就跳到登录页面,否则,继续执行.

  1.编写拦截器,在interceptor包下常见一个java类,名为LoginInterceptor,继承AbstractInterceptor:

public class LoginInterceptor extends AbstractInterceptor{

    @Override
public String intercept(ActionInvocation invocation) throws Exception { //得到拦截到的action的名称,看是否是login,当是login的时候,不用进行下面的检测了,直接执行下一个拦截器
String actionName=invocation.getProxy().getActionName();
if("login".equals(actionName)){
return invocation.invoke(); }
//如果不是login.则判断是否已登录,及检测session中key为user的值是否存在,如果不存在,跳回到登录页面
String user=(String)invocation.getInvocationContext().getSession().get("user");
if(user==null){
System.out.println("未登录");
return "login";
}
//进行到这里.说明用户已登录,则跳转到下一个拦截器
return invocation.invoke();
} }

2,在struts.xml中配置interceptor,主要特别注意的是,当使用了自定义的拦截器后,默认拦截器将不起作用,默认拦截器实在struts-default.xml中配置的,当引用了自定义拦截器,又想使用struts2提供的默认拦截器功能,需要手动配置:这里我将默认拦截器和我写的进行登录权限验证的拦截器,写到一个拦截器栈里,然后调用这个默认拦截器栈:

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

     <interceptors>
    <!-- 配置自定义的拦截器-->
<interceptor name="checkLogin" class="com.wang.interceptor.LoginInterceptor"/>
    <!--配置一个拦截器栈,里面包含自己定义的拦截器和defaultStack默认拦截器-->
      <interceptor-stack name="myStack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="checkLogin"></interceptor-ref>
</interceptor-stack>
</interceptors>
    <!--引用默认的拦截器(栈)-->
<default-interceptor-ref name="myStack"></default-interceptor-ref>

    <!--配置一个全局结果集-->
     <global-results>
<result name="login">/login.jsp</result>
</global-results>
<action name="login" class="com.wang.action.LoginAction" >
<result>/succ.jsp</result>
<result name="error">/login.jsp</result>
</action>
</package>

这里我使用了默认拦截器标签,即相当于在每个action标签下,使用了 <interceptor-ref name="myStack"></interceptor-ref>.jsp页面和LoginAction类这里就省略了.

再来介绍一下方法拦截器,方法拦截器比action拦截器控制的更加精细,大体实现方式和action拦截器相同,不同的是它继承的是MethodFilterInterceptor类,重写的是doInterceptor()方法,在struts.xml的配置上也有些不同,大体是这样:

 <interceptor-ref name="methodInterceptor">
<!--配置被拦截的方法-->
<param name="includeMethods">methodA,methodsB</param>
<!--配置不被拦截的方法-->
<param name="excludeMethods">methodsC,methodsD</param>
</interceptor-ref>

struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo的更多相关文章

  1. springmvc拦截器实现用户登录权限验证

    实现用户登录权限验证 先看一下我的项目的目录,我是在intellij idea 上开发的 1.先创建一个User类 package cn.lzc.po; public class User { pri ...

  2. springboot &plus; 拦截器 &plus; 注解 实现自定义权限验证

    springboot + 拦截器 + 注解 实现自定义权限验证最近用到一种前端模板技术:jtwig,在权限控制上没有用springSecurity.因此用拦截器和注解结合实现了权限控制. 1.1 定义 ...

  3. 1&period;5&lpar;Spring MVC学习笔记&rpar; 拦截器(Interceptor)

    一.拦截器 1.1拦截器简介 Spring中的拦截器类似Servlet中的过滤器(Filter),主要用于拦截用户请求, 并进行一定的处理操作(如验证权限.记录日志.设置编码方式等). 1.2拦截器实 ...

  4. struts2学习&lpar;5&rpar;拦截器简介以及例子执行过程

    一.拦截器简介: 二.Struts2预定义拦截器&拦截器栈 在执行action之前和之后,拦截器进行了操作: 比如struts-default.xml中就有很多预定义的拦截器:   拦截器栈: ...

  5. Struts2学习之拦截器

    © 版权声明:本文为博主原创文章,转载请注明出处 拦截器: - Struts2大多数核心功能都是通过拦截器实现的,每个拦截器完成某项功能 - 拦截器方法在Action执行之前或之后执行 工作原理: - ...

  6. Struts 2学习笔记——拦截器相关

    一.添加国际化支持 默认的struts-deault.xml文件中已经定义了国际化拦截器,内容如下 <!-定义国际化拦截器--> <interceptor name="i1 ...

  7. Spring MVC 使用拦截器优雅地实现权限验证功能

    在上一篇 SpringAOP 实现功能权限校验功能 中虽然用AOP通过抛异常,请求转发等勉强地实现了权限验证功能,但感觉不是那么完美,应该用拦截器来实现才是最佳的,因为拦截器就是用来拦截请求的,在请求 ...

  8. Struts2学习之拦截器栈

    © 版权声明:本文为博主原创文章,转载请注明出处 拦截器栈: - 从结构上看:拦截器栈相当于多个拦截器的组合 - 从功能上看:拦截器栈也是拦截器 默认拦截器栈: - 在struts-core.jar中 ...

  9. SpringMVC 学习笔记&lpar;拦截器的配置&rpar;&rpar;

    在设置SpringMVC的拦截器时,需要在SpringMVC中配置 拦截器对象,拦截器的的对象要 实现 HandlerInterceptor 接口 拦截器类的设置: public class inte ...

随机推荐

  1. 专业上的常用的工具和类库集 By 老衣

    Visual Studio 2013 扩展 CodeMaid: 可快速整理代码文件,清理不必要的代码和杂乱的格式.并在开发时实时提供代码复杂度的报告,以便帮助开发人员降低代码复杂度.提高代码质量. C ...

  2. SQL SERVER数据类型与C&num;数据类型对照表

      SQL SERVER类型   C#类型 精确数字 bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数 ...

  3. yxcms后台验证码不显示?怎么取消yxcms后台验证码

    嗨,大家好,我是YXCMS的小M老湿,(其实还是习惯大家叫我猪猪吧!)今天又要分享一则yxcms的使用技巧,当然也是yxcms用户在使用过程中很容易出现的小白问题,当然还是同样,yxcms的大神级别的 ...

  4. php中数组自定义排序

    php中数组自定义排序方法有很多,现在只提usort();不会保留原有键名. unsort调用方法就是unsrot($arr,func); 注意: 如果func是写在当前类中的话,那么调用的方式是 u ...

  5. UIView和CALayer有什么关系

    view是对layer的一种封装,你对view的很多操作事实上是对layer的操作,之所以会出现这两个东西是因为1.view支持很多手势的交互,你所操作iphone的各种点击,拖动等等.2.layer ...

  6. merge&lowbar;partition

    set echo on time on timing on spool 01_merge_partition.log @/testdb/change/env/env_test.sql connect ...

  7. Linux内核分析 读书笔记 (第五章)

    第五章 系统调用 5.1 与内核通信 1.调用在用户空间进程和硬件设备之间添加了一个中间层.该层主要作用有三个: 为用户空间提供了硬件的抽象接口. 系统调用保证了系统的稳定和安全. 实现多任务和虚拟内 ...

  8. (转)深入浅出K-Means算法

    原文地址:http://www.csdn.net/article/2012-07-03/2807073-k-means 摘要:在数据挖掘中,K-Means算法是一种 cluster analysis ...

  9. Python Pygame(5)绘制基本图形

    最近很火一些简单图形构成的小游戏,这里介绍一些绘制图形的函数. 1.绘制矩形 rect(Surface,color,Rect,width=0) 第一个参数指定矩形绘制到哪个Surface对象上 第二个 ...

  10. Python初学者第十一天 文件处理&lowbar;batch

    11day 文件的操作分为读.写.修改 1.读: f = open(file='D:\新建文本文档.txt',mode='r',encoding='gbk') data = f.read() prin ...