`
wuxiaozeng2440
  • 浏览: 27260 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

apache shiro 简介

 
阅读更多
Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能:
认证 - 用户身份识别,常被称为用户“登录”;
授权 - 访问控制,即权限或者角色;
密码加密 - 把JDK中复杂的密码加密方式进行封装;
会话管理 - 用户session管理器,可以让CS程序也使用session来控制权限。
除了以上功能,shiro还提供很多扩展
Web Support:主要针对web应用提供一些常用功能。
Caching:缓存可以使应用程序运行更有效率。
Concurrency:多线程相关功能。
Testing:帮助我们进行测试相关功能
Run As:一个允许用户假设为另一个用户身份(如果允许)的功能,有时候在管理脚本很有用。
Remember Me:记住用户身份,提供类似购物车功能。
对于任何一个应用程序,Shiro都可以提供全面的安全管理服务。并且相对于其他安全框架,Shiro要简单的多。

1.Subject:与程序进行交互的对象,简称用户
2.SecurityManager:shiro的核心,协调shiro的各个组件
3.Authenticator:登录控制
4.Authorizer :决定subject能拥有什么样角色或者权限。
5.SessionManager:创建和管理用户session。通过设置这个管理器,shiro可以在任何环境下使用session。
6.CacheManager :缓存管理器,可以减少不必要的后台访问。提高应用效率,增加用户体验。
7.Cryptography :Shiro的api大幅度简化java api中繁琐的密码加密。
8.Realms:程序与安全数据的桥梁,他获取安全数据来判断subject是否能够登录,subject拥有什么权限。


下面主要讲讲认证和授权是如何实现的:

认证:认证就是验证用户身份的过程。在认证过程中,用户需要提交实体信息(Principals)和凭据信息(Credentials)以检验用户是否合法。最常见的“实体/凭证”组合便是“用户名/密码”组合。

1.收集实体/凭据信息
UsernamePasswordToken token = new UsernamePasswordToken(username, password);  

2.提交实体/凭据信息,认证处理
Subject subject = SecurityUtils.getSubject();  
try {
subject.login(token);
} catch (UnknownAccountException ex) {//用户名没有找到。
} catch (IncorrectCredentialsException ex) {//用户名密码不匹配。
}catch (AuthenticationException e) {//其他的登录错误
}
//验证是否成功登录的方法
if (subject.isAuthenticated()) {
}


收集了实体/凭据信息之后,我们可以通过SecurityUtils工具类,获取当前的用户,然后通过调用login方法提交认证。 
如果login方法执行完毕且没有抛出任何异常信息,那么便认为用户认证通过。
3.认证回调
/**
* 认证回调函数, 登录时调用.
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws 

AuthenticationException {
UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
User user = accountManager.getUserByLoginName(token.getUsername());
if (user != null) {
return new SimpleAuthenticationInfo(new ShiroUser(user.getId(), user.getLoginName(), 

user.getName()),
user.getPassword(), getName());
}
return null;

}

判断每一个Realm是否支持提交的token,如果支持,Realm将调用getAuthenticationInfo(token); getAuthenticationInfo 方法就是实际认证处理,我们通过覆盖Realm的doGetAuthenticationInfo方法来编写我们自定义的认证处理。
4.登出
currentUser.logout();

当执行完登出操作后,Session信息将被清空,subject将被视作为匿名用户。

授权:授权即访问控制,它将判断用户在应用程序中对资源是否拥有相应的访问权限。
如,判断一个用户有查看页面的权限,编辑数据的权限,拥有某一按钮的权限,等等。
授权有着三个核心元素:权限、角色和用户。

权限是Apache Shiro安全机制最核心的元素。它在应用程序中明确声明了被允许的行为和表现。一个格式良好好的权限声明可以清晰表达出用户对该资源拥有的权限。
大多数的资源会支持典型的CRUD操作(create,read,update,delete),但是任何操作建立在特定的资源上才是有意义的。因此,权限声明的根本思想就是建立在资源以及操作上。
而我们通过权限声明仅仅能了解这个权限可以在应用程序中做些什么,而不能确定谁拥有此权限。 于是,我们就需要在应用程序中对用户和权限建立关联。
通常的做法就是将权限分配给某个角色,然后将这个角色关联一个或多个用户。

Shiro支持三种方式实现授权过程:
编码实现
注解实现
JSP Taglig实现

编码实现
1.基于编码的角色授权实现
Subject currentUser = SecurityUtils.getSubject(); 
if (currentUser.hasRole("administrator")) {  
    //拥有角色administrator
} else {  
    //没有角色处理
}  

2.角色授权断言方式控制
Subject currentUser = SecurityUtils.getSubject(); 
//如果没有角色admin,则会抛出异常,someMethod()也不会被执行
currentUser.checkRole(“admin");  


3.基于编码的资源授权实现
Subject currentUser = SecurityUtils.getSubject();  
if (currentUser.isPermitted("permssion:look")) {  
    //有资源权限
} else {  
    //没有权限
}  

4.资源授权断言方式控制
Subject currentUser = SecurityUtils.getSubject();  
//如果没有资源权限则会抛出异常。
currentUser.checkPermission("permssion:look");  



基于注解的授权实现
@ RequiresAuthentication 
可以用户类/属性/方法,用于表明当前用户需是经过认证的用户。 
@RequiresPermissions("users:view")
当前用户需拥有查看权限
@RequiresRoles ("admin")
当前用户需拥有制定角色 

@RequestMapping(value = { "list", "" })
public String list(Model model) {
List<User> users = accountManager.getAll();
model.addAttribute("users", users);
return "account/userList";
}



在JSP上的TAG实现
<shiro:hasPermission name="users:edit">
<div><a class="btn" href="${ctx}/account/users/create">创建用户</a></div>
</shiro:hasPermission>
<shiro:hasAnyRoles name="abc,123" >
<shiro:hasRole name="abc">
<shiro:lacksRole name="abc">
<shiro:hasPermission name="abc">
<shiro:lacksPermission name="abc">



权限控制精度:
注解方式控制权限只能是在方法上控制,无法控制类级别访问。
过滤器方式控制是根据访问的URL进行控制。允许使用*匹配URL,所以可以进行粗粒度,也可以进行细粒度控制。


Spring security 与apache shiro 差别:
shiro配置更加容易理解,容易上手;security配置相对比较难懂。
在spring的环境下,security整合性更好。Shiro对很多其他的框架兼容性更好,号称是无缝集成。
shiro 不仅仅可以使用在web中,它可以工作在任何应用环境中。
在集群会话时Shiro最重要的一个好处或许就是它的会话是独立于容器的。
Shiro提供的密码加密使用起来非常方便。

分享到:
评论
2 楼 wuxiaozeng2440 2013-05-27  
shiro本来就是动态获取permission的
比如说有“项目经理”这样一个角色,本来它只有“查看用户”的权限,现在给它增加了”修改用户“的权限。那“项目经理”这个角色的所有人重新登录就具备了修改的权限了
1 楼 q474818917 2013-05-22  
我有个疑问:
动态的修改了用户的角色
怎么才能让shiro动态的获取新的permission
shiro:hasPermission

相关推荐

    Apache Shiro API(Apache Shiro开发文档).CHM

    Apache Shiro。 官网 Apache Shiro API。 Apache Shiro开发文档。

    Apache Shiro教程

    Apache Shiro是一个强大的Java安全框架,它为应用程序提供了身份验证、授权、会话管理和加密等功能。这个教程将帮助你深入理解和有效地使用Shiro框架。在本文中,我们将详细探讨Shiro的核心概念、主要功能和常见用法...

    Apache shiro 1.13.0源码

    Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,简化了企业级应用的安全实现。Shiro 1.13.0 是其一个重要的版本,包含了多项更新和改进。在这个版本中,开发者可以深入理解其...

    Apache shiro1.2.4反序列化漏洞介绍.docx

    Apache Shiro是一个全面的Java安全框架,用于处理应用程序的安全需求,包括身份验证、授权、密码管理和会话管理。它的核心功能之一是“RememberMe”服务,该服务允许用户在关闭浏览器后仍然保持登录状态,无需在下次...

    让Apache_Shiro保护你的应用.pdf

    #### Apache Shiro简介 Apache Shiro是一个开源的安全(权限)框架,它的名字来源于日语,意为“城堡”,象征着坚固的防御。Shiro的设计理念是简单而强大,旨在为Java应用程序提供一个易于理解和使用的安全框架,...

    Apache_Shiro_使用手册(一)Shiro架构介绍

    #### 一、Shiro简介 Apache Shiro 是一款功能强大且易于使用的 Java 安全框架,它提供了多种安全相关的功能和服务,包括但不限于认证、授权、加密和会话管理。相较于其他安全框架,Shiro 在设计上更为简洁明了,...

    Apache Shiro中文开发文档.pdf

    #### 三、Apache Shiro 教程简介 - **入门指南**:本教程将引导你创建一个简单的由Apache Shiro保护的应用程序,通过实际操作加深对Shiro的理解。 - **环境准备**:需要Java 1.5及以上版本,推荐使用Apache Maven...

    apache shiro 管理用户权限与数据库交互

    Apache Shiro是一个强大且易用的Java安全框架,它提供了身份验证、授权、加密和会话管理等功能。本文将深入探讨如何使用Apache Shiro管理用户权限,并与数据库进行交互,以便实现动态、灵活的安全策略。 ### 一、...

    Apache Shiro核心jar包:shiro-core-1.3.2

    Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。 使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

    ApacheShiro复现记录1

    1. Apache Shiro简介 Apache Shiro是一个开源的身份验证和授权框架,主要用于Java应用程序。它提供了灵活的安全管理机制,帮助开发者快速构建安全的应用程序。 2. 反序列化攻击 反序列化攻击是一种常见的攻击方式...

    让Apache Shiro保护你的应用

    ### Apache Shiro:全方位守护应用安全 #### 一、Apache Shiro概述 **Apache Shiro**(发音为“shee-roh”,意为日语中的“堡垒”)是一款功能强大且易于使用的Java安全框架,旨在为各类应用提供全面的安全保障。...

    SpringBoot + Apache Shiro + Mybatis Plus + Thymeleaf 实现的内容管理系统

    采用SpringBoot + Apache Shiro + Mybatis Plus + Thymeleaf 实现的内容管理系统(附带权限管理),是搭建博客、网站的不二之选。 技术栈:Spring Boot、Apache Shiro、MyBatis-Plus、Alibaba Druid、Redis、MySQL、...

    Apache Shiro中文版使用手册

    ### Apache Shiro 使用手册知识点详解 #### 一、Apache Shiro 概述 **1.1 什么是 Apache Shiro** Apache Shiro 是一款强大的 Java 安全框架,它集成了认证、授权、加密和会话管理等功能。这些功能使得 Shiro 成为...

    apache shiro maven包

    Shiro 是一个 Apache Incubator 项目,旨在简化身份验证和授权。在本文中,了解 Apache Shiro 并通过示例来在一个 Groovy web 应用程序中尝试使用 Shiro 进行身份验证和授权

    spring mvc、apache shiro、mysql 框架搭建,基于maven构建

    本项目结合了Spring MVC、Apache Shiro和MySQL这三个强大的技术,通过Maven进行项目管理,旨在提供一个完整的后端开发解决方案。下面将详细介绍这三个框架以及Maven在其中的作用。 **Spring MVC** Spring MVC是...

    Apache Shiro 集成-spring

    Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常轻松地开发出足够安全的应用。Shiro 不仅可以用于Java Web 应用,也可以用于独立的Java应用。在集成Spring时,Shiro ...

    安全认证框架-Apache_Shiro研究心得

    #### Apache Shiro简介 Apache Shiro 是一个强大且易用的 Java 安全框架,提供了认证、授权、加密和会话管理功能,可以非常容易地开发出足够安全的应用——无论它们是部署在单一用户开发环境还是多服务器集群环境中...

    apache shiro 实例

    Apache Shiro 是一个强大且易用的Java安全框架,它提供了认证、授权、加密和会话管理功能,简化了企业级应用的安全实现。本实例将深入探讨 Apache Shiro 的核心概念和常见用法。 1. **认证**:Shiro 提供了用户身份...

    SpringBoot+MyBatis+Apache Shiro+Bootstrap+Thymeleaf可用于开发企业级应用系统

    本系统(基于SpringBoot+MyBatis+Apache Shiro+Bootstrap+Thymeleaf) 可用于开发所有企业级WEB应用系统(如:各种后台管理系统、CRM、ERP、CMS、OA、博客、论坛等...)。响应式布局,支持大部分浏览器(如:IE9+...

Global site tag (gtag.js) - Google Analytics