【Struts2学习笔记(10)】自定义拦截器管理权限访问

2024-05-24 03:32

本文主要是介绍【Struts2学习笔记(10)】自定义拦截器管理权限访问,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


(1)拦截器的功能什么的都不说了直接上代码来的直接些:

要自定义拦截器需要实现com.opensymphony.xwork2.interceptor.Interceptor接口:


下面自定义一个拦截器:

package cn.lc.interceptor;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;public class PermissionInterceptor implements Interceptor
{public void destroy(){}public void init(){}public String intercept(ActionInvocation invocation) throws Exception{Object user = ActionContext.getContext().getSession().get("user");if (user != null){return invocation.invoke(); // 如果user不为null,代表用户已经登录,允许执行action中的方法}ActionContext.getContext().put("message", "你没有权限执行该操作");return "success";}}


Action的代码:

package cn.itcast.action;public class HelloWorldAction {	private String message;public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public String addUI(){this.message = "addUI";return "success";}public String execute() throws Exception{this.message = "execute";return "success";}
}


struts.xml文件配置如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd"><struts><constant name="struts.enable.DynamicMethodInvocation" value="false" /><constant name="struts.action.extension" value="do,action" /><constant name="struts.multipart.maxSize" value="10701096" /><package name="employee" namespace="/control/employee" extends="struts-default"><interceptors><interceptor name="permission" class="cn.itcast.interceptor.PermissionInterceptor" /><interceptor-stack name="permissionStack"><!-- 系统的拦截器放在前面 自己定义的放在后面 --><interceptor-ref name="defaultStack" /><interceptor-ref name="permission" /></interceptor-stack></interceptors><!-- 定义默认的拦截器 可以让action一方面使用改默认的拦截器  还可以使用系统自带的拦截器 --><default-interceptor-ref name="permissionStack" /><global-results><result name="success">/WEB-INF/page/message.jsp</result></global-results><!-- 使用下边的方法,这样的话会覆盖默认拦截器中的拦截器栈等功能 --><action name="list_*" class="cn.itcast.action.HelloWorldAction" method="{1}"></action></package>
</struts>


二、过程如下:

1.当表单进行提交的时候:

<form action="<%=request.getContextPath()%>/control/employee/list_execute.action" method="post">id:<input type="text" name="person.id"><br/>name:<input type="text" name="person.name"><br/><input type="submit" value="发送"/></form>

2.找到struts.xml文件中的action 匹配到 list_*处,虽然此action中没有拦截器

(正常的配置应该是这样的

<action name="list_*" class="cn.itcast.action.HelloWorldAction" method="{1}"><result name="success">/WEB-INF/page/hello.jsp</result><interceptor-ref name="permissionStack"/>
</action>

3.但是我们有默认的拦截器,这样的话我们不仅可以使用自定义的拦截器 还可以使用系统自带的拦截器!实现了拦截功能!
	<default-interceptor-ref name="permissionStack" />


注意:(1)因为struts2中如文件上传,数据验证,封装请求参数到action等功能都是由系统默认的defaultStack中的拦截器实现的,所以我们定义的拦截器需要引用系统默认的defaultStack,这样应用才可以使用struts2框架提供的众多功能。

(2)如果希望包下的所有action都使用自定义的拦截器,可以通过<default-interceptor-ref name=“permissionStack”/>把拦截器定义为默认拦截器。(每个包只能指定一个默认拦截器。另外,一旦我们为该包中的某个action显式指定了某个拦截器,则默认拦截器不会起作用。)




注:转载请注明出处!


这篇关于【Struts2学习笔记(10)】自定义拦截器管理权限访问的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/997246

相关文章

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

如何自定义一个log适配器starter

《如何自定义一个log适配器starter》:本文主要介绍如何自定义一个log适配器starter的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求Starter 项目目录结构pom.XML 配置LogInitializer实现MDCInterceptor

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

SpringBoot项目Web拦截器使用的多种方式

《SpringBoot项目Web拦截器使用的多种方式》在SpringBoot应用中,Web拦截器(Interceptor)是一种用于在请求处理的不同阶段执行自定义逻辑的机制,下面给大家介绍Sprin... 目录一、实现 HandlerInterceptor 接口1、创建HandlerInterceptor实

NGINX 配置内网访问的实现步骤

《NGINX配置内网访问的实现步骤》本文主要介绍了NGINX配置内网访问的实现步骤,Nginx的geo模块限制域名访问权限,仅允许内网/办公室IP访问,具有一定的参考价值,感兴趣的可以了解一下... 目录需求1. geo 模块配置2. 访问控制判断3. 错误页面配置4. 一个完整的配置参考文档需求我们有一

Spring Boot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)

《SpringBoot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)》:本文主要介绍SpringBoot拦截器Interceptor与过滤器Filter深度解析... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实

C#实现访问远程硬盘的图文教程

《C#实现访问远程硬盘的图文教程》在现实场景中,我们经常用到远程桌面功能,而在某些场景下,我们需要使用类似的远程硬盘功能,这样能非常方便地操作对方电脑磁盘的目录、以及传送文件,这次我们将给出一个完整的... 目录引言一. 远程硬盘功能展示二. 远程硬盘代码实现1. 底层业务通信实现2. UI 实现三. De