如何使用shiro认证授权。

作者:未知 / 来源:网络 / 整理:脚本之家如果知识不能与人分享,这不算是真正的知识了。
这里是修真院后端小课堂,每篇分享文从【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】八个方面深度解析后端知识/技能,本篇分享的是:【如何使用shiro认证授权。】 【修真院java小课堂】如何使用shiro认证授权 大家好,我是IT修真院郑州分院第11期的JAVA学员,一枚正...

这里是修真院后端小课堂,每篇分享文从

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

八个方面深度解析后端知识/技能,本篇分享的是:

【如何使用shiro认证授权。】

 

【修真院java小课堂】如何使用shiro认证授权

 

大家好,我是IT修真院郑州分院第11期的JAVA学员,一枚正直纯洁善良的java程序员。

 

今天给大家分享一下,如何使用shiro认证授权。

 

1.背景介绍

 

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理。Shiro的主要功能是管理应用程序中与安全相关的全部,同时尽可能支持多种实现方法。

Shiro是建立在完善的接口驱动设计和面向对象原则之上的,支持各种自定义行为。Shiro提供的默认实现,使其能完成与其他安全框架同样的功能。

 

2.知识剖析

 

shiro三个核心组件-subject

 

Subject:主体,代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject,如网络爬虫,机器人等;即一个抽象概念;所有Subject都绑定到SecurityManager,与Subject的所有交互都会委托给SecurityManager;可以把Subject认为是一个门面;SecurityManager才是实际的执行者;

 

主体要访问系统,系统需要对主体进行认证、授权。Subject的生命周期:每一次访问时都会创建一个新的subject,然后创建shiro封装后的session,然后通过securityUtils中在程序的任何地方调用getSubject时都会返回同一个subject,也就是本次请求创建的那个。

 

shiro三个核心组件-SecurityManager

 

安全管理器;即所有与安全有关的操作都会与SecurityManager交互;且它管理着所有Subject;可以看出它是Shiro的核心,它负责与后边介绍的其他组件进行交互,协调管理的组件,保证组件之间的关联配合,同时也管理shiro视角的每一个用户,保证每一个用户的安全操作执行正确。

学习过SpringMVC,你可以把它看成DispatcherServlet前端控制器;

 

shiro三个核心组件-Realm

 

域,Shiro从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;也需要从Realm得到用户相应的角色

 

Realm在Shiro和你应用的安全数据间扮演着桥梁或者连接器的角色。当发生一次真实的安全数据交互,比如用户登录和鉴权,Shiro会从程序配置好的一或多个Realm中查询很多次数据。你可以配置你所需要的任意数量的Realm,Shrio在授权和鉴权的时候会去协调使用他们。

 

四大基石----身份验证,授权,会话管理,加密

 

Authentication:身份认证/登录,验证用户是不是拥有相应的身份;

Authorization:授权,即权限验证验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;

Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的;

Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;

 

3.常见问题

 

1)shiro权限控制有哪几张数据表

 

根据Shiro的设计思路,用户与角色之前的关系为多对多,角色与权限之间的关系也是多对多。

在数据库中需要因此建立5张表,分别是用户表(存储用户名,密码,盐等)、角色表(角色名称,相关描述等)、权限表(权限名称,相关描述等)、用户-角色对应中间表(以用户ID和角色ID作为联合主键)、角色-权限对应中间表(以角色ID和权限ID作为联合主键)。

 

2)shrio认证和授权的过程

 

4.编码实战

 

5.扩展思考

 

1)缓存利用Cache防止同一帐号重复登录。

 

Cache与Session这二个状态对像的其中有一个不同之处,Cache是一个全局对象,作用的范围是整个应用程序,所有用户;而Session是一个用户会话对象,是局部对象,用于保存单个用户的信息。

 

我们只要把每次用户登录后的用户信息存储在Cache中,把Cache的Key名设为用户的登录名,Cache的过期时间设置为Session的超时时间,在用户每次登录的时候去判断一下Cache

 

2)安全框架Shiro和Spring Security比较.

 

Shiro是一个强大而灵活的开源安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。

Spring Security除了不能脱离Spring,shiro的功能它都有。而且Spring Security对Oauth、OpenID也有支持,Shiro则需要自己手动实现。Spring Security的权限细粒度更高.

shiro有很多地方都比spring security方便简单直接,比起spring security的庞大模式更容易理解和切入一些,而spring security比shiro功能上要多一点,再就是和spring框架的无缝对接.

 

6.参考文献

 

https://blog.csdn.net/u011781521/article/details/55094751

 

7.更多讨论

 

1)如何实现自实现授权

 

实际开发中,通常提供 org.apache.shiro.realm.AuthorizingRealm 的实现类,

并提供 doGetAuthorizationInfo(PrincipalCollection principals) 方法的具体实现

 

2)权限管理的思路

 

将系统操作的每个url配置在权限表中,将权限对应到角色,将角色分配给用户,用户访问系统功能通过Filter进行过虑,过虑器获取到用户访问的url,只要访问的url是用户分配角色中的url则放行继续访问。

 

3)shiro的作用

 

我们在使用URL拦截的时候,要将所有的URL都配置起来,繁琐、不易维护

 

而我们的Shiro实现系统的权限管理,有效提高开发效率,从而降低开发成本。

 

 

 

PPT链接 视频链接

 

 

 

 

更多内容,可以加入IT交流群565734203与大家一起讨论交流

 

这里是技能树·IT修真院:https://www.jnshu.com,初学者转行到互联网的聚集地

你可能在找的问题:

java教程

简单认识SLF4J

SLF4J JAVA简易日志门面【SimpleLoggingFacadeforJava,缩写SLF4J】 宏观定义:一套包装Logging框架的界面程式,以外观模式实现

java教程

Semaphore源码分析-java8

1.特性分析 Semaphore就是一个计数的信号量 每一个线程在获取资源前,必须从semaphore获取许可,这保证了一定有可用的资源。

java教程

java中的12个原子操作类

1.简介 JDK1.5开始提供了java.util.concurrent.atomic包,这个包中的原子类提供了一种用法简单、性能高效、线程安全的更新变量的方式。

java教程

JDK中涉及的设计模式总结

所有的设计模式都找了一种JDK中的实现(并未列出所有,原因是太多,而且本次整理的目的是通过JDK中的实例完成设计模式的梳理和记忆,所以只写一种实现)。依次对类,对应的方法,功能进行介绍。

微信扫一扫

微信扫一扫

微信扫一扫,分享到朋友圈

标题
返回顶部