struts2的interceptor实现权限管理

简介: 这是以前写过的一个利用struts2的interceptor进行权限管理的笔记,以前是放电脑上的,今天偶然看到了,就贴出来,希望能对有需要的人有点帮助,同时自己以后需要看的时候也会更加方便点! 说明一点:这个interceptor里面的代码是根据我特定的项目写的,所以请有需要的人不要盲目...

这是以前写过的一个利用struts2的interceptor进行权限管理的笔记,以前是放电脑上的,今天偶然看到了,就贴出来,希望能对有需要的人有点帮助,同时自己以后需要看的时候也会更加方便点!

说明一点:这个interceptor里面的代码是根据我特定的项目写的,所以请有需要的人不要盲目的照搬!

自己写一个interceptor,该interceptor继承interceptor接口,实现其中的intercept方法;然后在struts.xml
中进行配置,并把该interceptor置于默认的interceptor中,注意,这里在设置默认的intercept的时候
一定要加上原来的intercept,否则原来的就不可以用了,就不能用struts2了,具体来说是这样:

<interceptors>
	<interceptor name="authentication" class="com.tiantian.tiantian.web.interceptor.AuthenticationInterceptor"></interceptor>
	<interceptor-stack name="myInterceptorStack">
		<interceptor-ref name="authentication"></interceptor-ref>
		<interceptor-ref name="defaultStack"></interceptor-ref>
	</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myInterceptorStack"/>
@Override
	public String intercept(ActionInvocation invoke) throws Exception {
		// TODO Auto-generated method stub
		HttpSession	session  = ServletActionContext.getRequest().getSession();
		
		
		
		String actionName = invoke.getProxy().getActionName();//获取action的名称
		String methodName = invoke.getProxy().getMethod();//获取执行的方法
		if ("execute".equals(methodName)) 
			methodName = "index";
		int index = actionName.indexOf("/");
		String name = actionName.substring(0, index);
		//priorityService通过Spring注入
		Priority priority = priorityService.find(name, methodName);
		Object obj = session.getAttribute("user");
		if (obj != null) {
			User currentUser = (User) obj;
			
			//moduleService利用Spring注入
			Module module = moduleService.findByUrl(name+"/"+methodName);
			if (module != null) {
				//sdService通过Spring注入
				SystemDiary diary = new SystemDiary();
				diary.setOperator(currentUser);
				diary.setOperateModule(module.getName());
				sdService.add(diary);
			}
			
			if (priority != null) {
				boolean hasPermission = currentUser.hasPermission(priority);
				
				if (!hasPermission) {
					return "forbidden";
				}
			}
		}
//		System.out.println("name = "+name + "**actionName = "+actionName+"*methodName = "+methodName);

		String result = invoke.invoke();
		return result;
	}

 

目录
相关文章
|
12月前
|
数据采集 DataWorks 大数据
数据开发平台/工具对比测评:
数据开发平台/工具对比测评
387 23
|
存储 机器学习/深度学习 数据可视化
MATLAB脚本与函数
【10月更文挑战第4天】本文介绍了MATLAB脚本与函数的基本概念及编写方法,涵盖脚本和函数的创建、运行及优缺点,通过示例帮助初学者快速上手。同时,文章还涉及数据类型、控制结构、数据可视化、文件操作、错误处理等内容,提供了丰富的示例和学习资源,助力初学者逐步掌握MATLAB编程。
|
前端开发 Java 关系型数据库
2023全网最详细的若依开源项目部署,将其部署到Linux操心系统中
2023全网最详细的若依开源项目部署,将其部署到Linux操心系统中
1829 0
|
编解码 移动开发 安全
如何让你的APP变小及手机各屏幕尺寸
如何让你的APP变小及手机各屏幕尺寸
352 0
|
机器学习/深度学习 数据采集 编解码
PIE Engine机器学习遥感影像监督分类全流程(附源码)
本文中,作者基于PIE Engine遥感云计算平台进行遥感影像监督分类,详细介绍了遥感影像分类的数据预处理、模型训练及结果可视化。
2815 2
|
存储 NoSQL JavaScript
MongoDB 6.x 在 Windows 和 Linux 下的安装教程(详细)
本文主要介绍 MongoDB 最新版本 6.x 在Windows 和 Linux 操作系统下的安装方式,和过去 4.x 、5.x 有些许不同之处,供大家参考。
10538 0
|
消息中间件 NoSQL 算法
RabbitMQ—重复消费、数据丢失和消息顺序性
RabbitMQ—重复消费、数据丢失和消息顺序性
1083 0
如何将钉钉和企业邮箱结合起来使用
最近在研究一个目前常见的企业办公模式,企业邮箱和钉钉的结合。 企业邮箱已经成为企业在现今互联网时代中不可缺少的通讯工具之一,企业邮箱的地址格式一般为“员工姓名@公司域名”,相对于个人邮箱,企业邮箱能为企业带来更多价值。
8606 0
|
消息中间件 网络协议 Java