springAOP与自定义注解实现细粒度权限控制管理
来源:互联网 发布:淘宝运营是什么 编辑:程序博客网 时间:2024/05/16 09:45
IOC与AOP无疑是spring的核心,提供了非常强大的功能,这两个思想为我们开发带来了巨大的方便。
这里我们aop简单实现一些权限控制,用到的aop提供的环绕通知,至于spring提供了那些通知,大家可以自行百度。
<bean id="privilegeAspect" class="com.privilege.PrivilegeAspect"></bean> <aop:config> <!-- 切入点表达式,确认目标类 com.service.impl包中的所有类中的所有方法 --> <aop:pointcut expression="execution(* com.service.impl.*.*(..))" id="perform"/> <!-- ref指向的对象就是切面 --> <aop:aspect ref="privilegeAspect"> <!-- 环绕通知 --> <aop:around method="isAccessMethod" pointcut-ref="perform"/> </aop:aspect> </aop:config>
可以直接这样配环绕通知,然后自行实现具体类的具体方法。
我这里使用spring提供的一个接口,已经帮我们实现好了,只需要配置好,实现他就可以了,可以更好的使用一些方便的方法
<bean id="privilegeInterceptor" class="com.interceptor.PrivilegeInterceptor"></bean><beanclass="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"><property name="beanNames"><list><value>*Service</value></list></property><property name="interceptorNames"><list><value><span style="font-family: Arial, Helvetica, sans-serif;">privilegeInterceptor</span></value></list></property></bean>这里的意思拦截所有service类里的方法,然后执行interceptorNames的拦截器,可以配置多个拦截器,按顺序执行
package com.interceptor;import java.lang.reflect.Method;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.core.annotation.AnnotationUtils;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.View;/** * @author landong.sun * */public class PrivilegeInterceptor implements MethodInterceptor{@AutowiredSessionProvider sessionProvider;@Overridepublic Object invoke(MethodInvocation invocation) throws Throwable {Method method = invocation.getMethod();//获取被拦截的方法Object[] arguments = invocation.getArguments();//获取拦截方法的参数PrivilegeInfo privilegeInfo = AnnotationUtils.findAnnotation(method, PrivilegeInfo.class);//根据方法找到注解,这个注解是我们自定义的注解,下面会讲if(privilegeInfo!=null) {String value = (String) AnnotationUtils.getAnnotationAttributes(privilegeInfo).get("value");//获取权限值boolean isAccessed = false; MenuCondition isPrivilege = new MenuCondition();//这是一个权限类 //从session中获取权限 for (MenuCondition privilege : privileges) { /* * 如果目标方法没有使用PrivilegeInfo注解,则解析出来的权限字符串就为空字符串 * 则默认用户拥有这个权限 */ if ("".equals(methodAccess)) { isAccessed = true; break; } /* * 用户原有权限列表中有的权限与目标方法上PrivilegeInfo注解配置的权限进行匹配 */ String truePrivikey = privilege.getlPrivyKey()+""; if (truePrivikey!= null && StringUtils.equalsIgnoreCase(methodAccess, truePrivikey)) { isAccessed = true; isPrivilege = privilege; break; } } /* * 3.如果用户拥有权限,则调用目标方法 ,如果没有,则不调用目标方法,只给出提示 */ if (isAccessed) { /* * 特殊,某些权限需要做特殊处理 * 比如用户信息权限,在方法执行完毕返回的时候,要将电话号码与邮箱抹除 */ //环绕通知前置特殊处理 this.beforeReslove(); Object proceed = invocation.proceed();//调用目标方法 //环绕通知后置特殊处理 proceed = this.afterReslove(); return proceed; } else{ ResultUtils.throwExcepion(ResultUtils.createFail(Config.FBD_MESSAGE, 301, null)); }return null;}}
自定义注解
@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface PrivilegeInfo {String value() default "";}
写得有点快,有点粗糙,希望大家多提意见
0 0
- springAOP与自定义注解实现细粒度权限控制管理
- 细粒度 自定义注解 权限控制具体实现
- 细粒度 自定义注解 权限控制具体实现
- 自定义标签 + shiro 实现权限细粒度控制
- SpringAOP实现自定义注解
- 在struts2.1中使用注解和拦截器实现权限细粒度控制
- 在struts2.1中使用注解和拦截器实现权限细粒度控制
- 权限控制之粗粒度与细粒度
- 自定义注解+拦截器实现权限控制
- 自定义注解+拦截器实现权限控制
- SpringBoot 自定义注解实现权限控制
- Spring AOP自定义注解实现权限控制
- 自定义注解,控制权限。
- 权限控制案例(细粒度)
- JAVAWEB开发之Servlet3.0新特性的使用以及注解的详细使用和自定义注解的方法、动态代理的使用、利用动态代理实现细粒度的权限控制以及类加载和泛型反射
- 细粒度权限管理
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- java SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- <fmt:> 格式化标签库
- 压力测试工具JMeter入门教程
- session入库
- 《HTML5从入门到精通中文学习教程》读书笔记2
- 什么是IaaS,PaaS和SaaS及其区别
- springAOP与自定义注解实现细粒度权限控制管理
- React Native中pointerEvent属性
- 字符串的快速匹配
- AVPlayer 本地、网络视频播放相关
- Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creatin
- 【Express】解决Error: Can't set headers after they are sent.
- dp 数划分 动态规划
- Spring4.X + Spring MVC + Mybatis3 零配置应用开发框架搭建详解 (3) - 实现最基本的登录处理
- php框架SlimPHP --- RESTful Web API 开发框架