• 011 注解驱动权限管理


    一 . 概述

      在shiro之中有三种方式进行权限的管理,

    (1)硬编码的方式,如subject.hasRole()这样的方式在代码之中织入.

    (2)使用注解的方式进行权限管理

    (3)使用jsp标签的方式进行权限控制

    本节,我们使用注解的方式进行配置.


    二 .环境的配置

    <!-- 配置Bean的生命周期后置管理器 -->    
        <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"></bean>
        
        <!-- 配置代理创建器 
            此对象需要依赖Bean后处理器
        -->
        <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
              depends-on="lifecycleBeanPostProcessor"/>
         <!-- 配置通知 -->
        <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
            <property name="securityManager" ref="securityManager"/>
        </bean>

    上面的配置需要在我们的spring.xml之中配置.

    说明,如果我们想要拦截controller,那么我们就需要将此配置放置在springmvc.xml的配置文件之中.

      如果我们想要拦截service的代码,我们就需要将此配置文件放置到spring.xml文件之中.

      总的来说,这个是由spring的父子容器造成的.


    三 .测试代码

    @RestController
    public class AdviceController {
        
        //该注解表示此功能需要认证才能访问
        @RequiresAuthentication
        @RequestMapping("/advice")
        public String advice() {
            return "advice";
        }
    }

    上面的方式是需要认证之后才能进行访问的,当我们没有认证的时候,我们就不能进行访问.

      此时,会抛出一个异常的信息来.

      我们可以做一个全局的异常拦截器,将页面重定向到登录页面.


    四.总结

      完成shiro的注解配置十分的简单,只需要配置几个Bean就能完成.

      但是我们思考这么一个问题,我们使用注解其实就是硬编码.只不过编写注解变得简单了.

      因此,我们拒绝使用角色的注解,而是使用权限的注解.

      这样我们可以通过分配权限来完成权限的动态分配,如果分配的是角色,那么我们这种动态性就不存在了.  

  • 相关阅读:
    bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊
    1691: [Usaco2007 Dec]挑剔的美食家
    CF809E Surprise me!
    「总结」狄利克雷卷积,莫比乌斯反演和杜教筛
    AT3611 Tree MST
    AT2134 Zigzag MST
    CF891C Envy
    【HNOI2018】游戏
    【HNOI2016】树
    【HNOI2016】网络
  • 原文地址:https://www.cnblogs.com/trekxu/p/9061795.html
Copyright © 2020-2023  润新知