•  理解  

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

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

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

  •  作用

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

  •  执行流程

  • 实现步骤

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

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

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

public class LoginInterceptor extends AbstractInterceptor{@Overridepublic 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. Spring MVC拦截器实现用户登录权限验证案例

    本节将通过拦截器来完成一个用户登录权限验证的 Web 应用 springMVCDemo07,具体要求如下:只有成功登录的用户才能访问系统的主页面main.jsp,如果没有成功登录而直接访问主页面,则拦 ...

  2. java springmvc权限校验_springmvc拦截器实现用户登录权限验证

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

  3. springboot + 拦截器 + 注解 实现自定义权限验证

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

  4. Struts2学习三拦截器

    JAVA Struts2 DAY05 拦截器HelloWorld 扩展拦截器HelloWorld NetCTOSS登录检查 上传文件 1 拦截器HelloWorld 1.1 问题 写一个拦截器的Hel ...

  5. struts2自定义拦截器一——模拟登陆权限验证

    1.http://localhost:8083/struts2/user.jsp 表示用户已登陆,存放session对象 2.http://localhost:8083/struts2/quit.js ...

  6. Spring Boot笔记-拦截器相关(用户权限方面)

    Spring Boot拦截器的使用 使用注解@Configuration 继承WebMvcConfigurerAdapter 重写addInterceptors添加需要拦截器地址: 运行截图如下: 后 ...

  7. struts2学习笔记--使用servletAPI实现ajax的一个小Demo

    这个例子是点击网页上的一个button,然后调用action,使用response项前台打印"哎呦 不错哦",当然是以异步形式实现. jsp页面: <head>< ...

  8. Struts2拦截器Interceptor的使用

    一.拦截器的使用: 只有用户登录时才可以查看商品,否则点击查看商品时会跳回login登录页面. struts2.xml中拦截器Interceptor的配置: <interceptors>& ...

  9. Struts2学习笔记(九) 拦截器(Interceptor)(下)

    拦截器的查找顺序 如果我们在多个地方配置了拦截器,那么框架会按什么样的顺序进行查找呢: (1)   首先查找当前Action是否声明了拦截器,如果有则使用这个拦截器,不再继续寻找,如果没有,则执行下一 ...

最新文章

  1. R语言使用cowplot包的plot_grid函数将两个ggplot2可视化结果并排组合起来并添加图像标签A、B、设置组合图像使用共享的图例(shared legend in cowplot)
  2. ie8开发人员工具无法使用,按f12任务栏里出现任务,但是窗体不弹出
  3. 新后缀再开放,投资者应谨慎对待!
  4. 【渝粤教育】电大中专金融与税收作业 题库
  5. python自动化数据报告_如何:使用Python将实时数据自动化到您的网站
  6. Java基础知识强化之集合框架笔记27:ArrayList集合练习之去除ArrayList集合中的重复字符串元素...
  7. PHP源码安装及配置——以fastCGI的方式与httpd整合
  8. Linux服务器性能分析
  9. 依赖反转原理,IoC容器和依赖注入:第2部分
  10. conda 命令 直接安装 OpenCV[Anaconda]
  11. Markdown图片并排展示、图注对齐
  12. 今天又啃了一些數據類型的東西~漸漸地記起了一些東西。
  13. SQL函数字符串分拆
  14. 代数余子式与伴随矩阵
  15. 创建或打开android模拟器时遇到的问题,以及打开后遇到的Failed to install FragmentTest.apk on device 'emulator-5554': timeout
  16. 礼多人不怪:跟美国教授通邮件的18种礼仪
  17. Java 8 并发篇 - 冷静分析 Synchronized(下)
  18. LiFi用于佩皮尼昂急救中心
  19. SC16IS750芯片SPI转串口
  20. php7.2微信明文加密,微信公众平台开发:消息加密

热门文章

  1. linux环境变量设置注意事项
  2. python如何使用sdk_七牛云存储Python SDK使用教程 - 基本介绍
  3. mysql无法存储文字_mysql存储不了中文字符串怎么办
  4. linux c 图像处理,基于uClinux的图像处理及Socket传输的实现-计算机应用与软件.PDF...
  5. 信息系统项目管理师:第6章:项目进度管理-章节重点汇总
  6. 容灾与备份究竟有什么区别?
  7. SpringBoot集成OpenOffice实现doc文档转html
  8. cnpm install时提示resource busy or locked,syslink...
  9. Winforn中实现ZedGraph自定义添加右键菜单项(附源码下载)
  10. VMware中为linux设置网络