细说shiro之一:shiro简介

官网:https://shiro.apache.org/

一. Shiro是什么
Shiro是一个Java平台的开源权限框架,用于认证和访问授权。具体来说,满足对如下元素的支持:

  • 用户,角色,权限(仅仅是操作权限,数据权限必须与业务需求紧密结合),资源(url)。
  • 用户分配角色,角色定义权限。
  • 访问授权时支持角色或者权限,并且支持多级的权限定义。

Q:对组的支持?
A:shiro默认不支持对组设置权限。

Q:是否可以满足对组进行角色分配的需求?
A:扩展Realm,可以支持对组进行分配角色,其实就是给该组下的所有用户分配权限。

Q:对数据权限的支持? 在业务系统中定义?
A:shiro仅仅实现对操作权限的控制,用于在前端控制元素隐藏或者显示,以及对资源访问权限进行检查。数据权限与具体的业务需求紧密关联,shiro本身无法实现对数据权限的控制。

Q:动态权限分配?
A:扩展org.apache.shiro.realm.Realm,支持动态权限分配。

Q:与Spring集成?
A:可以支持与Spring集成,shiro还支持jsp标签。

二. 系统架构

在shiro架构中,有3个最主要的组件:Subject,SecurityManager,Realm。
Subject本质上就是当前访问用户的抽象描述。
SecurityManager是Shiro架构中最核心的组件,通过它可以协调其他组件完成用户认证和授权。实际上,SecurityManager就是Shiro框架的控制器。
Realm定义了访问数据的方式,用来连接不同的数据源,如:LDAP,关系数据库,配置文件等等。

三. 如何使用Shiro
Shiro作为一个完善的权限框架,可以应用在多种需要进行身份认证和访问授权的场景,例如:
1. 在独立应用中使用shiro
http://www.cnblogs.com/nuccch/p/6780550.html 细说shiro之三:在独立应用中使用shiro

2. 在web应用中使用shiro
http://www.cnblogs.com/nuccch/p/6785167.html 细说shiro之四:在web应用中使用shiro

3. 在spring框架中集成shiro
http://www.cnblogs.com/nuccch/p/6790408.html 细说shiro之五:在spring框架中集成shiro

四. Shiro原理
1. 认证
通过调用Subject.login(token)方法开始用户认证流程。

Subject currentUser = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
token.setRememberMe(true);
try {currentUser.login(token);
} catch (UnknownAccountException e) {logger.error(String.format("user not found: %s", username), e); // 用户不存在
} catch (IncorrectCredentialsException e) {logger.error(String.format("incorrent credentials: %s", username), e); // 密码不正确
} catch (ConcurrentAccessException e) {logger.error(String.format("user has been authenticated: %s", username), e); // 用户重复登录
} catch (AccountException e) {logger.error(String.format("account except: %s", username), e); // 其他账户异常
}

shiro用户认证时序图:

2. 授权
shiro访问授权有3种实现方式:api调用,java注解,jsp标签。
(1)在独立应用程序中访问授权通过api调用实现

String role = "schwartz";
Subject currentUser = SecurityUtils.getSubject();
if(currentUser.hasRole(role)) {//用户属于角色schwartz
}else{//用户不属于角色schwartz
}

(2)在spring框架中可以通过java注解

@RequiresPermissions(value={"log:manage:*"})
public ModelAndView home(HttpServletRequest req) {ModelAndView mv = new ModelAndView("home");return mv;
}

(3)在JSP页面中还可以直接使用jsp标签

<!-- 使用shiro标签 -->
<shiro:hasPermission name="log:manage:*"><a href="<%=request.getContextPath()%>/user/home">操作日志审计</a><br/>
</shiro:hasPermission>

shiro访问授权时序图:

五. 注意事项
1.org.apache.shiro.realm.jdbc.JdbcRealm如果需要在授权时开启权限检查,必须设置permissionsLookupEnabled为true,否则只检查角色。
2.用户退出登录时,Shiro用户必须执行logout(),必须要注销Session信息,避免影响下一次用户认证和授权。

SecurityUtils.getSubject().logout();
req.getSession().invalidate();

3.如果在数据库中存储的用户密码为编码值(如MD5加密),则在发送登录请求时传递的密码参数也必须是MD5加密结果,否则认证失败。
4.shiro框架只能控制操作权限,不能控制数据权限。数据权限与具体的业务紧密关联,无法通过一个通用的框架完成,通常都是利用关系数据库查询过滤实现。
对操作权限的控制有2层含义,其一:用户在前端只能看到对应权限的元素;其二:在后端对用户操作进行权限检查。
作者:2Simple
出处:http://www.cnblogs.com/nuccch/
声明:本文版权归作者和博客园共有,欢迎转载,但请在文章页面明显位置给出原文连接。

●史上最强Tomcat8性能优化

●阿里巴巴为什么能抗住90秒100亿?--服务端高并发分布式架构演进之路

●B2B电商平台--ChinaPay银联电子支付功能

●学会Zookeeper分布式锁,让面试官对你刮目相看

●SpringCloud电商秒杀微服务-Redisson分布式锁方案

查看更多好文,进入公众号--撩我--往期精彩

一只 有深度 有灵魂 的公众号0.0

细说shiro之一:shiro简介相关推荐

  1. “动吧“ - crud 练习 part7 - Shiro安全框架简介 - 58~60 - 、[扩展] - 动态菜单 - 60

    名词: ------------------------------------------- subject - 主体.起因 - (登录到==>登录成功后 , 全部的记录) principal ...

  2. Shiro框架的简介

    1, 什么是shiro Apache Shiro 是Java 的一个安全框架.Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE 环境,也可以用在JavaEE 环境.Shiro ...

  3. Shiro <shiro:hasPermission >标签不生效,shiro权限不生效原因

    第一个可能配置文件:shiroConfig.java没加这个 /*** 开启Shiro的注解(如@RequiresRoles,@RequiresPermissions),需借助SpringAOP扫描使 ...

  4. shiro框架---shiro配置介绍(一)

    接上一篇文章shiro框架-通过系统介绍shiro框架中的实现逻辑   项目已分享到GitHub上,如果需要的可以看下,springboot+shiro项目Git下载地址. shiro在springb ...

  5. Day374.shiro授权Shiro+jsp整合Springboot -Shiro

    Shiro授权 一.授权 授权,即访问控制,控制谁能访问哪些资源.主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的. 二.关键对象 授权可简单理解为who对what( ...

  6. 【Shiro】shiro的Session管理

    [Shiro]shiro的Session管理 1. Session管理介绍 2. JavaSE环境下 3. JavaEE环境下 4. Session监听 5. Session检测 1. Session ...

  7. 什么是shiro?Shiro能干嘛?

    1, 什么是shiro Apache Shiro 是Java 的一个安全框架.Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE 环境,也可以用在JavaEE 环境.Shiro ...

  8. Shiro <shiro:hasPermission 标签不生效,shiro权限不生效原因

    第一个可能配置文件:shiroConfig.java没加这个 /*** 开启Shiro的注解(如@RequiresRoles,@RequiresPermissions),需借助SpringAOP扫描使 ...

  9. Shiro安全框架-简介

    1. 简介 Apache Shiro是Java的一个安全框架.功能强大,使用简单的Java安全框架,它为开发人员提供一个直观而全面的认证,授权,加密及会话管理的解决方案. 实际上,Shiro的主要功能 ...

  10. Shiro(1)--Shiro简介

    强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan 一.作用简介 Apache Shiro是一个强大且易用的Java安全框架,可以执行身份验证.授权 ...

最新文章

  1. 极速理解设计模式系列:11.单例模式(Singleton Pattern)
  2. java list_Java集合-List
  3. WEB文件管理器2.0版
  4. python爬虫实例-python爬虫实例大全
  5. 20200314 SQ Intel Realsense D435 USB 线长、转接线个数测试数据表
  6. ros_openvino_toolkit环境搭建纪实
  7. 回退n帧协议c语言代码,[计算机网络]Ch.3 数据链路层
  8. “约见”面试官系列之常见面试题之第四十五篇CSS优先级(建议收藏)
  9. Toonz开源,Apple开源CareKit,以及更多新闻
  10. 【渝粤教育】电大中专电子线路作业 题库
  11. python 公司教程_最全Python快速入门教程,满满都是干货
  12. vue的axios两种写法(不知道对不对,仅供参考)
  13. 我堕落了?我怎么就堕落了? (转)
  14. 云计算机ppt模板,云计算的PPT模板
  15. Unity学习笔记:Animator、Animator Controller、Animation Cilp之间的关系、以及Blend Tree的用法;
  16. java遍历mysql数据库_java mysql 遍历
  17. #includealgorithm
  18. C51模拟PS2键盘(四)
  19. 百度飞桨图像分类------第三天(实现蝴蝶图像分类)
  20. 【国际大厂招人啦】PayPal专场招聘直播,立即占位!

热门文章

  1. 从一个不同角度看精准度与召回
  2. libnet介绍与分析
  3. mysql inet_aton 原理_mysql 使用inet_aton和inet_ntoa处理ip地址
  4. Android在虚拟机和安卓机上运行不了
  5. 【机器学习】Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Rand forest 和 gradient boosting...
  6. 微信小程序获取urlScheme地址Python版
  7. 一文读懂SIMD指令集 目前最全SSE/AVX介绍
  8. telnet不是内部或外部命令也不是可运行的程序或批处理
  9. LevelDb(二):LevelDb整体架构
  10. 【微信小程序】小程序实现文件的上传及预览,以PDF文件为例。