【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

相关文章

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

基于Spring实现自定义错误信息返回详解

《基于Spring实现自定义错误信息返回详解》这篇文章主要为大家详细介绍了如何基于Spring实现自定义错误信息返回效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录背景目标实现产出背景Spring 提供了 @RestConChina编程trollerAdvice 用来实现 HTT

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

Spring Boot拦截器Interceptor与过滤器Filter详细教程(示例详解)

《SpringBoot拦截器Interceptor与过滤器Filter详细教程(示例详解)》本文详细介绍了SpringBoot中的拦截器(Interceptor)和过滤器(Filter),包括它们的... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)详细教程1. 概述1

使用Dify访问mysql数据库详细代码示例

《使用Dify访问mysql数据库详细代码示例》:本文主要介绍使用Dify访问mysql数据库的相关资料,并详细讲解了如何在本地搭建数据库访问服务,使用ngrok暴露到公网,并创建知识库、数据库访... 1、在本地搭建数据库访问的服务,并使用ngrok暴露到公网。#sql_tools.pyfrom

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Javascript访问Promise对象返回值的操作方法

《Javascript访问Promise对象返回值的操作方法》这篇文章介绍了如何在JavaScript中使用Promise对象来处理异步操作,通过使用fetch()方法和Promise对象,我们可以从... 目录在Javascript中,什么是Promise1- then() 链式操作2- 在之后的代码中使