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

权限项目总结(四) shiro 授权

时间:2015-06-05 17:33:46      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:权限   shiro   授权   

概述

Authorization(授权):不难理解,授权就是用来控制当前访问用户在访问系统资源权限。

这个词也做证书的解释,从证书这个角度来讲,判断是否拥有对资源访问的权限时,当前用户需要提供证书。

授权的核心

用户—角色—权限,以角色为中心,一般情况将权限分配给某个角色,然后给用户分配某个权限或是一组权限。

基本的流程

技术分享

  • 当前用户调用isPermitted方法,携带着当前用户访问资源的路径,一般是字符串或者是集合。

  • 调用自定义的Realm类的重写方法 doGetAuthorizationInfo(PrincipalCollection principals) 这里将获取当前用户的权限数据。可以是.ini 文件,也可以是从数据库中查询。

  • 调用 AuthorizingRealm 类的 getAuthorizationInfo(PrincipalCollection principals) 方法得到角色的权限,内部最后通过 isPermitted(PrincipalCollection principals, String permission) 遍历验证。

看看最后验证权限的方法,也没有想象中那么复杂。

public boolean isPermitted(PrincipalCollection principals, String permission) {
assertRealmsConfigured();
for (Realm realm : getRealms()) {
if (!(realm instanceof Authorizer)) continue;
if (((Authorizer) realm).isPermitted(principals, permission)) {
return true;
}
}
return false;
}

Shiro三种方式实现授权

1:编写代码——在Java 代码中用像if 和else 块的结构执行授权检查。

  @RequestMapping(params = "myjsp")
    public String home() {
        Subject currentUser = SecurityUtils.getSubject();
        if(currentUser.isPermitted("user.do?myjsp")){
            return "my";
        }else{
            return "error/noperms";
        }
    }  

2:JDK 的注解——你可以添加授权注解给你的 Java 方法。

@RequiresAuthentication要求当前用户已经认证通过,才能执行该方法

@RequiresGuest session中没有权限

@RequiresPermissions 要求当前用户认证后拥有多个权限

@RequiresRoles(“administrator”) 要求用户拥有(“administrator”)权限

@RequiresUser 要求subject为存在于当前系统中的用户

3:JSP/GSP 标签库——你可以控制基于角色和权限的JSP 或者GSP 页面输出。

<shiro:authenticated>  
<a>已通过认证的用户才能</a>  
</shiro:authenticated>  

权限项目总结(四) shiro 授权

标签:权限   shiro   授权   

原文地址:http://blog.csdn.net/cfl20121314/article/details/46379795

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