Shiro

前言

  • Apache Shiro 是一个强大易用的 Java 安全框架,提供了认证、授权、加密和会话管理等功能。

  • 对于任何一个应用程序,Shiro 都可以提供全面的安全管理服务。

  • 并且相对于其他安全框架,Shiro 要简单的多。

  • 目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 Spring Security 做的功能强大。

  • 但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的 Shiro 就足够了。

  • Shiro 官网

  • 跟我学 Shiro

  • Shiro 快速入门

1、Shiro

  • Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境。

  • Shiro 可以帮助我们完成:认证、授权、加密、会话管理、与 Web 集成、缓存等。而且 Shiro 的 API 也是非常简单,其基本功能点如下图所示。

2、数据库支持

  • RBAC 是当下权限系统的设计基础,同时有两种解释

    • Role-Based Access Control,基于角色的访问控制。即,你要能够删除产品,那么当前用户就必须拥有产品经理这个角色。
    • Resource-Based Access Control,基于资源的访问控制。即,你要能够删除产品,那么当前用户就必须拥有删除产品这样的权限。

3、加密

  • md5

    • 通常都会采用非对称加密,什么是非对称呢?就是不可逆的,而 md5 就是这样一个算法。如代码所示 123 用 md5 加密后,得到字符串: 202CB962AC59075B964B07152D234B70,这个字符串,却无法通过计算,反过来得到源密码是 123.
    • 这个加密后的字符串就存在数据库里了,下次用户再登陆,输入密码 123,同样用 md5 加密后,再和这个字符串一比较,就知道密码是否正确了。
      如此这样,既能保证用户密码校验的功能,又能保证不暴露密码。

    • md5 加密又有一些缺陷

      • 如果我的密码是 123,你的也是 123, 那么 md5 的值是一样的,那么通过比较加密后的字符串,我就可以反推过来,原来你的密码也是 123.
      • 与上述相同,虽然 md5 不可逆,但是我可以穷举法呀,我把特别常用的 100 万或者更多个密码的 md5 值记录下来,比如 12345 的,abcde 的。
      • 相当一部分人用的密码也是这些,那么只要到数据库里一找,也很快就可以知道原密码是多少了。这样看上去也就破解了,至少一部分没有想象中那么安全吧。
    • 为了解决这个问题,引入了盐的概念。盐是什么意思呢?比如炒菜,直接使用 md5,就是对食材(源密码)进行炒菜,因为食材是一样的,所以炒出来的味道都一样,可是如果加了不同分量的盐,那么即便食材一样,炒出来的味道也就不一样了。
    • 所以,虽然每次 123 md5 之后都是 202CB962AC59075B964B07152D234B70,但是 我加上盐,即 123+随机数,那么 md5 值不就不一样了吗?这个随机数,就是盐,而这个随机数也会在数据库里保存下来,每个不同的用户,随机数也是不一样的。
    • 再就是加密次数,加密一次是 202CB962AC59075B964B07152D234B70,可以加密两次呀,就是另一个数了。而黑客即便是拿到了加密后的密码,如果不知道到底加密了多少次,也是很难办的。

4、Web 支持 (Servlet)

5、权限维护

6、Springboot 中整合 Shiro

文章目录
  1. 1. 前言
  2. 2. 1、Shiro
  3. 3. 2、数据库支持
  4. 4. 3、加密
  5. 5. 4、Web 支持 (Servlet)
  6. 6. 5、权限维护
  7. 7. 6、Springboot 中整合 Shiro
隐藏目录