案例一、角色校验

  项目中,对某些方法需要用户具备指定角色权限才能执行。

  1. /**
  2. * 角色校验注解
  3. */
  4. @Retention(RetentionPolicy.RUNTIME)
  5. @Target(ElementType.METHOD)
  6. public @interface HasRole {
  7. String[] value() default {};
  8. }
  1. /**
  2. * 角色校验切面
  3. */
  4. @Component
  5. @Aspect
  6. @Order(0)
  7. public class RoleAspect {
  8. @Autowired
  9. private UserService userService;
  10.  
  11. // 切入点
  12. @Pointcut("@annotation(com.demo.annotation.HasRole)")
  13. private void pointCut() {}
  14.  
  15. // 前置通知,在执行目标方法之前执行
  16. @Before("pointCut()")
  17. public void checkRole(Joinpoint joinpoint) {
  18. Signature signature = joinpoint.getSignature();
  19. MethodSignature methodSignature = null;
  20. // 判断注解作用对象是否为方法
  21. if (!(signature instanceof MethodSignature)) {
  22. throw new IllegalArgumentException("该注解只能用于方法");
  23. }
  24. methodSignature = (MethodSignature) signature;
  25. // 获取当前访问的class
  26. Class<?> className = joinpoint.getTarget().getClass();
  27. // 获取当前访问的方法名
  28. String methodName = methodSignature.getName();
  29. // 获取当前访问的方法形参类型
  30. Class[] argClass = methodSignature.getParameterTypes();
  31. // 获取当前访问的方法对象
  32. Method method = className.getMethod(methodName, argClass);
  33. // 获取当前访问的方法上的注解
  34. HasRole hasRole = method.getAnnotation(HasRole.class);
  35. // 校验权限,去数据库查是否有该权限
  36. if (!userService.hasRole(hasRole.value())) {
  37. // 抛出自定义权限异常
  38. throw new AuthorizationException("无权限");
  39. }
  40. }
  41. }
  1. /**
  2. * 目标对象
  3. */
  4. @Controller
  5. public class DemoController {
  6. // 目标方法,NeedRole:定义了角色权限的枚举类
  7. @PostMapping
  8. @HasRole("NeedRole.ADMIN")
  9. public void demoMethod(String arg) {
  10. System.out.println("角色校验");
  11. }
  12. }

Spring-AOP之工作实践(一)的更多相关文章

  1. Spring aop 原始的工作原理的理解

    理解完aop的名词解释,继续学习spring aop的工作原理. 首先明确aop到底是什么东西?又如何不违单一原则并实现交叉处理呢? 如果对它的认识只停留在面向切面编程,那就脏了.从oop(Objec ...

  2. 框架源码系列十:Spring AOP(AOP的核心概念回顾、Spring中AOP的用法、Spring AOP 源码学习)

    一.AOP的核心概念回顾 https://docs.spring.io/spring/docs/5.1.3.RELEASE/spring-framework-reference/core.html#a ...

  3. spring Aop设计原理

    转载至:https://blog.csdn.net/luanlouis/article/details/51095702 0.前言 Spring 提供了AOP(Aspect Oriented Prog ...

  4. springmvc 运行原理 Spring ioc的实现原理 Mybatis工作流程 spring AOP实现原理

    SpringMVC的工作原理图: SpringMVC流程 . 用户发送请求至前端控制器DispatcherServlet. . DispatcherServlet收到请求调用HandlerMappin ...

  5. Spring Boot实践——Spring AOP实现之动态代理

    Spring AOP 介绍 AOP的介绍可以查看 Spring Boot实践——AOP实现 与AspectJ的静态代理不同,Spring AOP使用的动态代理,所谓的动态代理就是说AOP框架不会去修改 ...

  6. Spring Bean的生命周期、Spring MVC的工作流程、IOC,AOP

    1.Spring Bean的生命周期? (1)构造方法实例化bean. (2)构造方法设置对象属性. (3)是否实现aware接口,三种接口(BeanNameAware,BeanFactoryAwar ...

  7. Spring学习之旅(八)Spring 基于AspectJ注解配置的AOP编程工作原理初探

    由小编的上篇博文可以一窥基于AspectJ注解配置的AOP编程实现. 本文一下未贴出的相关代码示例请关注小编的上篇博文<Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AO ...

  8. Spring学习之旅(六)Spring AOP工作原理初探

    AOP(Aspect-Oriented  Programming,面向切面编程)是Spring提供的关键技术之一. AOP基于IoC,是对OOP(Object-Oriented Programming ...

  9. 【AOP】Spring AOP基础 + 实践 完整记录

    Spring AOP的基础概念 ============================================================= AOP(Aspect-Oriented Pr ...

  10. [转]彻底征服 Spring AOP 之 实战篇

    Spring AOP 实战 看了上面这么多的理论知识, 不知道大家有没有觉得枯燥哈. 不过不要急, 俗话说理论是实践的基础, 对 Spring AOP 有了基本的理论认识后, 我们来看一下下面几个具体 ...

随机推荐

  1. Java集合类: Set、List、Map

    Set.List.Map都是集合接口   set --其中的值不允许重复,无序的数据结构   list   --其中的值允许重复,因为其为有序的数据结构   map--成对的数据结构,健值必须具有唯一 ...

  2. django中ckeditor富文本编辑器使用

    1.安装模块 (pillow是python的一个图像处理库) pip install django-ckeditor pip install pillow 2.编辑seetings.py配置文件 IN ...

  3. ionic + asp.net core webapi + keycloak实现前后端用户认证和自动生成客户端代码

    概述 本文使用ionic/angular开发网页前台,asp.net core webapi开发restful service,使用keycloak保护前台页面和后台服务,并且利用open api自动 ...

  4. bzoj1497最大闭权图基础题

    1497: [NOI2006]最大获利 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 5485  Solved: 2661[Submit][Status] ...

  5. 【原创】CentOS 7搭建多实例MySQL8(想要几个搞几个)

    起因 最近项目上开始重构,可能会用到主从加读写分离的情况,就想先在本地搭一个出来试试效果,结果百度一搜出来一大堆,然而自己去踩坑的没几个,绝大多数都是去抄的别人的内容,关键是实际应用中还会出错,浏览器 ...

  6. web自动化之鼠标事件

    鼠标操作from selenium.webdriver.common.action_chains import ActionChains通过ActionChains 类来完成鼠标操作主要操作流程:1. ...

  7. Linux光盘yum源软件安装

    关于Linux中的软件安装,有三种方法,个人认为比较方便的就是yum安装,有网的话比较简单,暂且不提.本文主要记录在没有外网的情况下,如何以本地光盘搭建yum源来实现yum安装. 主要包括以下几步: ...

  8. Linux passwd 提权

    利用条件,passwd 可写 ls -al /etc/passwd 利用方式: 生成密钥  openssl passwd -1 -salt test 123456 写入passwd echo 'tes ...

  9. Rocket - tilelink - FIFOFixer

    https://mp.weixin.qq.com/s/JS4Pguwa6LXjPsMq6nW8HA   简单介绍FIFOFixer的实现.   ​​   1. 基本介绍   按照一定的策略把某一部分m ...

  10. 字符串去除空格的方式(用replace()实现)

    去除所有空格: str = str.replace(/\s+/g,""); 去除两头空格: str = str.replace(/^\s+|\s+$/g,"") ...