springboot2.x shiro整合

前言

  这篇博客旨在完成Springboot2.x与shiro与JWT的整合,先从Springboot2.x整合shiro开始,再将JWT与Shiro整合,其中JWT部分用到了缓存Redis。

正文

介绍

shiro介绍网上已经很多了,我们这里引用一下其中一个博客 Shiro框架简介

Apache Shiro是Java的一个安全框架。对比另一个安全框架Spring Sercurity,它更简单和灵活。Shiro可以帮助我们完成:认证、授权、加密、会话管理、Web集成、缓存等。
在这里插入图片描述

  1. Authentication:身份认证/登录,验证用户是不是拥有相应的身份;
  2. Authorization:授权,即验证权限,验证某个已认证的用户是否拥有某个权限; 即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限。
  3. Session Management:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通的JavaSE环境的,也可以是Web环境的。
  4. Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;
  5. Web Support:Web支持,可以非常容易的集成到Web环境中
  6. Caching:缓存,比如用户登录后,其用户信息,拥有的角色/权限不必每次去查,提高效率。
  7. Concurrency:Shiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;
  8. Testing:提供测试支持
  9. Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问
  10. Rember Me:记住我,这是非常常见的功能,即一次登录后,下次再来的话不用登录了。

原理

我们看完基本的介绍后,要首先了解一下shiro是怎么工作的:
在这里插入图片描述

  • Subject: 用户主体(把操作交给SecurityManager) 这个可以当成一个用户、一个爬虫…
  • SecurityManager:安全管理器(关联Realm)。进行认证和授权操作
  • Realm:Shiro连接数据的桥梁 ,这里就是获取数据库中密码、权限的地方。
流程(为了方便理解需要仔细读一下):
  1. 用户访问登录接口,传入username、password(或者其他的字段)后,为了能让shiro完成校验(账号密码认证、权限认证等),我们需要提供用户的真实密码,用户的权限信息,而这些信息需要我们重写Realm类中的两个方法来获取。
  2. 然后shiro先进行账号密码校验,正确后会返回seesionId信息(或者其他的,这个没有仔细看过),shiro还会把这些信息存放在内存中(session),用户下次访问带上这个sessioinId进行访问。
  3. 当用户携带sessionId进行访问有权限限制的资源时,shiro首先会根据我们提供的用户真实的密码验证sessionId是否正确(这里每次请求都要访问数据库似乎会大大提高服务器的开销,这里后面会提到),验证通过后会进一步根据我们提供(重写)的获取权限的方法进行权限验证,通过后才可正常访问。

所以我们只需要完成::

  1. 获取用户密码(我们需要把用户传过来的密码和数据库中的密码传给shiro,shiro帮我们完成了密码对比
  2. 获取用户的权限(权限认证shiro也会帮我们完成,我们只需要标注下访问某个接口需要什么权限就好了)

引入

首先我们需要引入pom文件:

<dependency> 
    <groupId>org.apache.shiro</groupId> 
    <artifactId>shiro-spring</artifactId>    
    <version>1.4.0</version>
</dependency>

配置

我们引入后需要进行配置,也就是原理中提到的 Subject->SecurityManager->Realm,我们记得顺序。然后开始编写 ShiroConfig 类:

ShiroConfig

/**
 * @Author: goodtimp
 * @Date: 2019/10/7 20:46
 * @description :  shiro配置类
 */
@Con
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值