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

Shiro

时间:2018-07-20 13:50:31      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:角色权限   iss   自己   管理器   缓存   效率   ack   认证   mem   

Shiro是Apache的一个开源框架,提供了认证、授权、加密、会话管理、与Web集成、缓存等功能。Shiro属于轻量框架,不仅可以实现web应用的权限管理,还可以实现c/s系统,分布式系统权限管理。

基本功能
Authentication
身份认证,登录时使用,验证用户是否存在。
Authorization
授权,验证用户是否拥有某个权限。
Session Manager
会话管理。用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中。
Cryptography
加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储。
Web Support
Web支持,可以非常容易的集成到Web环境。
Caching
缓存。用户登录后,其用户信息、拥有的角色、权限不必每次去查数据库,这样可以提高效率。
Concurrency
Shiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去。
Testing
提供测试支持。
Run As
允许一个用户假装为另一个用户(如果他们允许)的身份进行访问。
Remember Me
记住我。一次登录后,下次不用登录。

核心组件
Subject
代表当前用户,与当前应用交互的任何东西都是Subject,如网络爬虫,机器人等。
SecurityManager
安全管理器,是Shiro的核心。管理着所有Subject,所有与安全有关的操作都会与SecurityManager交互。如果学习过SpringMVC,可以把它看成DispatcherServlet。
Realm
相当于数据源,通过Realm认证、授权相关数据。一般情况下在项目中需要自定义Realm,重写认证和授权的方法。

Shiro不提供维护用户/权限,而是通过Realm让开发人员自己注入。

认证原理
1.创建SecurityManager。
2.调用Subject.login方法提交认证。
3.SecurityManager调用IniRealm进行认证。
4.接收IniRealm返回Authentication认证信息。

授权原理
1.对Subject进行授权,调用方法isPermitted("permission串")。
2.SecurityManager执行授权,通过ModularRealmAuthorizer执行授权。
3.ModularRealmAuthorizer调用自定义的Realm.doGetAuthorizationInfo从数据库中查询权限。
4.ModularRealmAuthorizer调用PermissionResolver进行权限串比对。
5.对比时,通过isPermitted中"permission串"进行校验,如果没有权限,抛出异常。

Shiro的授权方式
1.通过写if/else代码块完成。(这种比较少用,一般在项目中采用后两种)
Subject subject = SecurityUtils.getSubject();
if(subject.hasRole(“admin”)) {
//有权限
} else {
//无权限
}
2.注解。
@RequiresPermissions("system:operator:list")
public Object list() {
//有权限
}
3.JSP/GSP标签。
<%@ taglib uri="http://shiro.apache.org/tags" prefix="shiro" %>
<shiro:authenticated> - 登录之后
<shiro:notAuthenticated> - 不在登录状态时
<shiro:guest> - 用户在没有RememberMe时
<shiro:user> - 用户在RememberMe时
<shiro:hasAnyRoles name="abc,123" > - 在有abc或者123角色时
<shiro:hasRole name="abc"> - 拥有角色abc
<shiro:lacksRole name="abc"> - 没有角色abc
<shiro:hasPermission name="abc"> - 拥有权限资源abc
<shiro:lacksPermission name="abc"> - 没有abc权限资源
<shiro:principal> - 显示用户身份名称
<shiro:principal property="username"/> - 显示用户身份中的属性值
<shiro:hasRole name="admin"><!— 有admin角色权限 —></shiro:hasRole>

Shiro

标签:角色权限   iss   自己   管理器   缓存   效率   ack   认证   mem   

原文地址:https://www.cnblogs.com/lc19149/p/9340912.html

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