shiro@RequiresPermission校验实现

本文介绍了如何利用Spring AOP结合shiro-spring,通过AuthorizationAttributeSourceAdvisor实现Shiro的注解式校验,包括`@RequiresPermission`注解的处理流程和关键步骤。讲解了如何创建advisor,匹配方法以及在Spring框架中的应用过程。

shiro-spring

借助Spring AOP特性实现shiro的注解式校验

引入shiro-spring依赖后一定要注入AuthorizationAttributeSourceAdvisor以便借助spring aop进行shiro注解校验

    @Bean
    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
        return authorizationAttributeSourceAdvisor;
    }

 

 

StaticMethodMatcherPointcut

如何接入spring框架,借助spring实现自身AOP操作

一个抽象类实现 PointcutAdvisor, Ordered, Serializable 三个接口

public abstract class StaticMethodMatcherPointcut extends StaticMethodMatcher implements Pointcut

这是一个桥模式,实现Pointcut接口代表这是一个切点,但extends StaticMethodMatcher 代表这个抽象类更加适合表示为方法匹配器,一个切点+方法匹配的聚合抽象类,允许两个维度的扩展

一个双重维度的方便super class,

一些SpringAOP相关的接口

StaticMethodMatcherPointcut统合spring AOP相关描述的两个重要接口

  1. MethodMatcher

    一个抽象接口用于判断方法能否被增强(advice)

    • TrueMethodMatcher

      一个饿汉实现的单例模式,是一个匹配所有方法的规范(Canonical)匹配器

      实现3-arg的matches方法直接抛出异常代表该方法在运行时不可被调用

          @Override
          public boolean matches(Method method, Class<?> targetClass, Object... args) {
              // Should never be invoked as isRuntime returns false.
              throw new UnsupportedOperationException();
          }

       

    • boolean matches(Method method, Class<?> targetClass);执行static的检测目标method是否符合被增强的条件

    • boolean isRuntime();运行时是否需要调用boolean matches(Method method, Class<?> targetClass, Object... args);,即使2参数的matches方法判断为true

    • boolean matches(Method method, Class<?> targetClass, Object... args);只有2-arg的matches方法被调用并返回true且isRuntime也返回true该方法被立刻调用判断是否运行时动态判断

  2. Pointcut

    切入点抽象接口,由classFilter和MethodMatcher组成

    所有的网络请求在servlet中都有filter来实现AOP的横切拦截处理,那么class在AOP实现中也可以有自己的ClassFilter

    • ClassFilter getClassFilter();获取类过滤器

    • Return the MethodMatcher for this pointcut. 获取该pointcut的方法匹配器

  3. Advisor

    pointcut采取的动作

    在某个aspect的增强动作,可以是前置、后置、环绕等

  4. &n

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值