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

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

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

【如何使用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/u011781...

 

7.更多讨论

 

1)如何实现自实现授权

 

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

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

 

2)权限管理的思路

 

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

 

3)shiro的作用

 

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

 

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


用户bPbdDlb
422 声望36 粉丝

引用和评论

0 条评论