【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

相关文章

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

SpringBoot集成MyBatis实现SQL拦截器的实战指南

《SpringBoot集成MyBatis实现SQL拦截器的实战指南》这篇文章主要为大家详细介绍了SpringBoot集成MyBatis实现SQL拦截器的相关知识,文中的示例代码讲解详细,有需要的小伙伴... 目录一、为什么需要SQL拦截器?二、MyBATis拦截器基础2.1 核心接口:Interceptor

WinForm跨线程访问UI及UI卡死的解决方案

《WinForm跨线程访问UI及UI卡死的解决方案》在WinForm开发过程中,跨线程访问UI控件和界面卡死是常见的技术难题,由于Windows窗体应用程序的UI控件默认只能在主线程(UI线程)上操作... 目录前言正文案例1:直接线程操作(无UI访问)案例2:BeginInvoke访问UI(错误用法)案例

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

MySQL中的InnoDB单表访问过程

《MySQL中的InnoDB单表访问过程》:本文主要介绍MySQL中的InnoDB单表访问过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】

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

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)