之前介绍了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. STM32CubeMX使用方法及功能介绍

    推荐 分享一个朋友的人工智能教程,零基础!通俗易懂!希望你也加入到人工智能的队伍中来! http://www.captainbed.net/strongerhuang Ⅰ.写在前面 学习本文之前可以查 ...

  2. ASP.NET MVC 使用 Datatables (1)

    具体步骤: 1.建立实体类 public class Asset { public System.Guid AssetID { get; set; } [Display(Name = "Ba ...

  3. 使用jQuery模拟Google的自动提示效果

    注意: 1.本功能使用SqlServler2000中的示例数据库Northwind,请打SP3或SP4补丁:2.请下载jQuery组件,河西FTP中有下载:3.本功能实现类似Google自动提示的效果 ...

  4. 关于JQueryMobile中Slider的一点研究

    滑动条 Slider                 给input的设置一个新的HTML5属性为type="range",可以给页面添加滑动条组件,可以指定它的value值(当前值 ...

  5. 错题0913-java

    子类A继承父类B, A a = new A(); 则父类B构造函数.父类B静态代码块.父类B非静态代码块.子类A构造函数.子类A静态代码块.子类A非静态代码块 执行的先后顺序是? A:父类B静态代码块 ...

  6. ZooKeeper是以Fast Paxos算法为基础的

    ZooKeeper是以Fast Paxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxo ...

  7. [ACM] FZU 2086 餐厅点餐 (枚举)

    roblem Description Jack近期喜欢到学校餐厅吃饭.好吃干净还廉价. 在学校餐厅.有a种汤,b种饭.c种面条,d种荤菜,e种素菜. 为了保证膳食搭配,Jack每顿饭都会点1~2样荤菜 ...

  8. RabbitMQ OS X下安装及常用命令-1

            RabbitMQ的主页在http://www.rabbitmq.com/ . 1. 安装Erlang RabbitMQ是用Erlang编写的,所以需要先安装Erlang,如果有的话跳过 ...

  9. servlet和jsp中间的交互

    jsp本质上也是一个servlet, 所有的jsp页面最终会编译成一个servlet 1. jsp访问servlet jsp访问servlet比较简单通过get, post的方式直接访问servlet ...

  10. MyEclipse------如何添加jspsmartupload.jar,用于文件上传

    方法: 右键“Web”工程->properties->Libraries->Add External JARs...->找到“jspsmartupload.jar”,添加进去 ...