【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

相关文章

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

SpringBoot AspectJ切面配合自定义注解实现权限校验的示例详解

《SpringBootAspectJ切面配合自定义注解实现权限校验的示例详解》本文章介绍了如何通过创建自定义的权限校验注解,配合AspectJ切面拦截注解实现权限校验,本文结合实例代码给大家介绍的非... 目录1. 创建权限校验注解2. 创建ASPectJ切面拦截注解校验权限3. 用法示例A. 参考文章本文

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

聊聊springboot中如何自定义消息转换器

《聊聊springboot中如何自定义消息转换器》SpringBoot通过HttpMessageConverter处理HTTP数据转换,支持多种媒体类型,接下来通过本文给大家介绍springboot中... 目录核心接口springboot默认提供的转换器如何自定义消息转换器Spring Boot 中的消息

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Mybatis-Plus 3.5.12 分页拦截器消失的问题及快速解决方法

《Mybatis-Plus3.5.12分页拦截器消失的问题及快速解决方法》作为Java开发者,我们都爱用Mybatis-Plus简化CRUD操作,尤其是它的分页功能,几行代码就能搞定复杂的分页查询... 目录一、问题场景:分页拦截器突然 “失踪”二、问题根源:依赖拆分惹的祸三、解决办法:添加扩展依赖四、分页

mybatis用拦截器实现字段加解密全过程

《mybatis用拦截器实现字段加解密全过程》本文通过自定义注解和MyBatis拦截器实现敏感信息加密,处理Parameter和ResultSet,确保数据库存储安全且查询结果解密可用... 目录前言拦截器的使用总结前言根据公司业务需要,灵活对客户敏感信息进行加解密,这里采用myBATis拦截器进行简单实

通过配置nginx访问服务器静态资源的过程

《通过配置nginx访问服务器静态资源的过程》文章介绍了图片存储路径设置、Nginx服务器配置及通过http://192.168.206.170:8007/a.png访问图片的方法,涵盖图片管理与服务... 目录1.图片存储路径2.nginx配置3.访问图片方式总结1.图片存储路径2.nginx配置