一 . 概述
授权: 就是访问控制.
在用户认证之后,用户做出的一些操作之前需要判断用户是否有权限可以完成该操作,这个过程就是授权.
在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)一种是通过是否抛出异常进行判断.