shiro概述(四)注解式授权校验

用户认证+授权后,就可以进行接口权限控制。方法是拿用户(已授予的)权限与接口所需权限进行比较,不包含则视为无权。在shiro中,授权校验可以通过以下方式实现:

(1)自定义拦截器或者AOP,通过对需要鉴权的接口做拦截,参照拦截器与过滤器(三)拦截自定义Annotation注解_@annotation 拦截类注解-CSDN博客

(2)注解式授权校验

 注解式授权拦截只能用于方法,用在类头上无效;项目支持拦截式注解的前提是开启了aop

 <!-- AOP依赖,必须,否则shiro权限拦截验证不生效 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
 
 
 //以下为注解支持配置
    /**
     * Shiro生命周期处理器
     */
    @Bean(name = "lifecycleBeanPostProcessor")
    public static LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() {
        return new LifecycleBeanPostProcessor();
    }
 
    /**
     * 开启Shiro的注解(如@RequiresRoles,@RequiresPermissions),需借助SpringAOP扫描使用Shiro注解的类,并在必要时进行安全逻辑验证
     */
    @Bean
    @DependsOn("lifecycleBeanPostProcessor")
    public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator() {
        DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
        advisorAutoProxyCreator.setProxyTargetClass(true);
        return advisorAutoProxyCreator;
    }
 
    /**
     * 开启Shiro-aop注解支持
     */
    @Bean
    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
        return authorizationAttributeSourceAdvisor;
    }

常见的注解式授权有: 

一、@RequiresAuthentication:

  1、作用:要求当前Subject已经在session中验证通过(验证当前用户是否登录:  subject.isAuthenticated() 结果为true)

二、@RequiresUser:

验证用户是否被记忆

三、@RequiresGuest:

用户没有登录认证或被记住过,验证是否是一个guest的请求,与@RequiresUser完全相反。换言之,RequiresUser == !RequiresGuest。此时subject.getPrincipal() 结果为null.

四、@RequiresRoles:

验证当前用户是否具有某角色,与验证权限类似

五、@RequiresPermissions:

验证用户是否具有一个或多个权限,该注解经常在项目中使用,如果不满足条件则抛出AuthorizationException异常。

  1、单权限:

@RequiresPermissions("school_manage")

2、多权限:权限值value用数组代替,再设置logical

(1)符合一个即可:logical = Logical.OR,如

@RequiresPermissions(value = { "menu_1", "mneu_2" }, logical = Logical.OR)

(2)必须全部符合:logical = Logical.AND,如

@RequiresPermissions(value = { "menu_1", "mneu_2" }, logical = Logical.AND)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w_t_y_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值