之前介绍了Shiro的Web訪问控制和缓存配置,事实上Shiro和Spring一样能够使用Annotation来配置方法级别的安全。省去自己每次获取Subject去做权限验证,比方在改动用户password的时候仅仅能是用户本人。在改动用户用户帐号的状态(lock/unlock)仅仅有管理员能够,这些操作都须要方法级别的安全保护。

假设要自己获取当前的登录User信息,能够通过Shiro的SecurityUtils来实现。然后对User的权限做推断:

private User getCurrentUser(){
Subject currentUser = SecurityUtils.getSubject();
return userManager.getUserByName((String) currentUser.getPrincipal());
}

假设使用Annotation。这些东西都是由Shiro来帮你实现了。你仅仅要在业务方法上面加上相应的权限管理,一般来说使用的是都是每一个对象的读写的权限,假设简单系统,能够把User相应的Role当成权限管理对象。给个简单样例:

 @Override
@RequiresRoles("ROLE_ADMIN")
public Show save(Show show){
if(null != show.getId()){
//due to create/update time is not passed back from page
Show oldShow = findById(show.getId());
if(null == oldShow){
return null;
}
List<String> oldFilelist = LYTZUtils.getFilePathFromContent(oldShow.getContent());
if(LOG.isDebugEnabled()){
LOG.debug("the old content contains " + oldFilelist.size() + " images in image server");
}
show = super.save(show);
List<String> newFilelist = LYTZUtils.getFilePathFromContent(show.getContent());
for(String filePath : oldFilelist){
if(!newFilelist.contains(filePath) && fileService.isFileExists(filePath)){
if(LOG.isDebugEnabled()){
LOG.debug("unusedFile: " + filePath);
}
fileService.removeFile(filePath);
}
} return show;
} else {
return super.save(show);
}
}

Shiro提供的annotation包含了基本验证:@RequiresAuthentication,@RequiresUser,@RequiresGuest ,角色验证:@RequiresRoles(value={“ROLE_VIP”, “ROLE_USER”}, logical= Logical.AND) ,@RequiresPermissions (value={“read”, “write”}, logical= Logical.OR)

Shiro Annotation保护实例的更多相关文章

  1. 权限框架 - shiro 简单入门实例

    前面的帖子简单的介绍了基本的权限控制,可以说任何一个后台管理系统都是需要权限的 今天开始咱们来讲讲Shiro 首先引入基本的jar包 <!-- shiro --> <dependen ...

  2. shiro的入门实例-shiro于spring的整合

    shiro是一款java安全框架.简单而且可以满足实际的工作需要 第一步.导入maven依赖 <!-- shiro --> <dependency> <groupId&g ...

  3. 让Apache Shiro保护你的应用

    在尝试保护你的应用时,你是否有过挫败感?是否觉得现有的Java安全解决方案难以使用,只会让你更糊涂?本文介绍的Apache Shiro,是一个不同寻常的Java安全框架,为保护应用提供了简单而强大的方 ...

  4. shiro实战系列(六)之Authorization(授权)

    授权,又称作为访问控制,是对资源的访问管理的过程.换句话说,控制谁有权限在应用程序中做什么. 授权检查的例子是:该用户是否被允许访问这个网页,编辑此数据,查看此按钮,或打印到这台打印机?这些都是 决定 ...

  5. Apache Shiro安全(权限框架)学习笔记一

    1. 授权需要继承 AuthorizingRealm 类, 并实现其 doGetAuthorizationInfo 方法 2. AuthorizingRealm 类继承自 Authenticating ...

  6. shiro实战系列(二)之入门实战续

    下面讲解基于实战系列一,所以相关的java文件获取pom.xml及其log4j文件同样适用于本次讲解. 一.Using Shiro Using Shiro 现在我们的 SecurityManager ...

  7. shiro 安全框架 详解

    ---恢复内容开始--- Shiro 简介 简介• Apache Shiro 是 Java 的一个安全(权限)框架.• Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE 环境, ...

  8. OC:属性的内部实现原理、dealloc内释放实例变量、便利构造器方法的实现原理、collection的内存管理

    代码: // // main.m #import <Foundation/Foundation.h> #import "Person.h" #import " ...

  9. java安全框架shiro(一)

    第一个简单的案例 ,通过读取.ini文件的方式模拟登陆, 1.通过Factory工厂的getInstance()方法来获取SecurityManager的实例,实例化Factory需要一个ini文件的 ...

随机推荐

  1. RP2837 OUT1-OUT2 对应关系 2路DO

    RP2837 OUT1-OUT2 对应关系: OUT1  AD2   PD22  继电器1 OUT2  AD4   PD24     继电器2 root@sama5d3-linux:~ echo 11 ...

  2. RP2836 板卡信息标识

    RP2836 板卡信息标识 可以标识16种扩展应用 MCI_DA4 PD5     R120上拉 R121下拉 MCI_DA5  PD6 R125上拉 R124下拉 MCI_DA6  PD7 R122 ...

  3. selenuim爬虫实战(日lofter.com)

    LOFTER是网易公司2011年8月下旬推出的一款轻博客产品. LOFTER专注于为用户提供简约.易用.有品质.重原创的博客工具.原创社区,以及有品质的手机博客应用. LOFTER首次采用独立域名,口 ...

  4. mysql 存储过程调用

    CALL  存储过程名('参数值1',‘参数值2',’参数值3')

  5. CI 结合Bootstrap 分页

    #显示列表 public function index(){ //载入分页类 $this->load->library('pagination'); //每页显示的条数 $perPage= ...

  6. JS关于浏览器尺寸的方法

    document.body.clientWidth BODY对象宽度.通配符未清零margin的时候,小于页面可见区域宽度document.body.clientHeight BODY对象高度.doc ...

  7. thinkphp 使用外部php或html 原理

  8. linux 测试工具

    最近在寻找linux的测试工具,试用了一些.记录如下. memtester 内存测试工具,通过对内存进行读写进行测试.可以对同一块空间进行多次的读写. 源码分析 http://www.cnblogs. ...

  9. 【UVa】And Then There Was One(dp)

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  10. 通过公网IP主机建立ssh隧道

    环境描述 hostA: 有公网IP的linux主机 hostB: 私有路由器后端无公网IPlinux主机,能够ssh连接到hostA hostC: 个人pc机 隧道创建步骤 step1 在hostB上 ...