码迷,mamicode.com
首页 > 其他好文 > 详细

004 shiro的授权

时间:2018-05-16 23:58:11      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:pre   含义   subject   mep   cto   mit   方法   eal   new   

一 . 概述

  授权: 就是访问控制.  

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

  在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的授权

标签:pre   含义   subject   mep   cto   mit   方法   eal   new   

原文地址:https://www.cnblogs.com/trekxu/p/9048725.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!