004 shiro的授权

Posted 最爱五仁月饼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了004 shiro的授权相关的知识,希望对你有一定的参考价值。

一 . 概述

  授权: 就是访问控制.  

    在用户认证之后,用户做出的一些操作之前需要判断用户是否有权限可以完成该操作,这个过程就是授权.

  在shiro之中,支持两个方面的授权检测.

  (1)角色授权

  (2)权限授权


二 授权环境的搭建

[users]
trek=123,admin
[roles]
admin=user:add,user,del

我们这里还是使用int文件充当Realm,自然还会使用IniSecurityManager对象完成授权操作.

  上面的文本表示的含义:

  有一个账号为trek,密码为123的用户,他的角色是admin.  

  其中admin角色拥有user:add,user:del的权限.


三 .授权代码

    //实现shiro的认证过程
        //创建SecurityManager
        SecurityManager securityManager = new IniSecurityManagerFactory("classpath:shiro.ini").createInstance();
        //将当前的SecurityManager设置到当前的环境之中
        SecurityUtils.setSecurityManager(securityManager);
        
        //下面实现的是一个登陆的功能
        //获取Subkect,相当与一个Currentuser
        Subject currentUser = SecurityUtils.getSubject();
        
        //创建认证需要的token
        UsernamePasswordToken token = new UsernamePasswordToken("trek","123");
        
        //实现登录功能
        try {
            currentUser.login(token);
        } catch (AuthenticationException e) {
            logger.info("认证失败,账号为{},密码为{}",token.getUsername(),new String(token.getPassword()));
            throw new AuthenticationException();
        }
        
        logger.info("认证成功!!");
        
        //此处完成shiro的授权操作
        
        //角色授权
        logger.info("当前的用户是否具有admin的角色{}",currentUser.hasRole("admin"));
        
        //权限授权
        logger.info("当前的用户是否具有user:add的权限{}",currentUser.isPermitted("user:add"));

核心的代码就是上面的红色部分,我们调用了Subjec对象的hasRole()方法,isPermitted()方法分别进行了角色授权和权限授权的操作.

  我们一定需要注意的就是授权就是权限的检查.


四 .授权流程

[1]认证之后

[2]调用Subject的各种授权方法进行操作

  注意 : 授权的方式有两种,

  (1)一种通过方法的返回值的true和false进行授权是否成功的判断

  (2)一种是通过是否抛出异常进行判断.

 

以上是关于004 shiro的授权的主要内容,如果未能解决你的问题,请参考以下文章

获得具有授权码授予的 3-Leged Token 会给出错误 AUTH-004

Shiro授权

Shiro 安全框架详解二(概念+权限案例实现)

全栈编程系列SpringBoot整合Shiro(含KickoutSessionControlFilter并发在线人数控制以及不生效问题配置启动异常No SecurityManager...)(代码片段

如何仅使用 Apache Shiro 进行授权?

006-shiro授权