Shiro介绍及解析

2023年2月18日13:25:47

一、明白什么是认证和授权

从百度百科上理解的,感觉非常通俗易懂

你要登机,你需要出示你的 passport 和源 ticket,passport 是为了证明你张三确实是你百张三,这就是 认证;而机票是为了证明你张三确实买度了票可以上飞机,这就是 授权。

二、shiro的概念
1.什么是shiro

 

2.shiro的特性


3.shiro的核心组件

 

三、shiro实战debug解析(token是用户输入的,info是从缓存和数据库中查出来的,
认证主要做token和info中密码的判等;授权主要是将注解上的权限或者角色与从数据库中查出来的权限做判等)

1.首先先配置一个Realm类

 

1.1 然后配置认证的方法,因为配置了拦截路径,所以当用户调用sub.login(token)的方法的时候


会先去AuthenticatingRealm类中调用getAuthenticationInfo方法,如下图所示

之后开始回调实现类也就是咱自己实现的doGetAuthenticationInfo这个方法,方法的逻辑大致是获取用户输入框中输入的token中的principal,然后根据principal去数据库或者缓存中查相应的用户的信息。之后将token中的principal以及数据库中查询到的password还有自己实现的AuthRealm类的全路径传入到authenticationInfo对象中去,如下图所示

 构造完之后返回info对象,接着走下边的assertCredentialsMath方法(),如下图所示


assertCredentialsMath方法()里边会针对token(用户输入的要验证的“用户”)以及info(从数据库里边查的实际的“用户”)里边的密码进行校验,如果对比成功则返回true

 

 1.2 然后配置授权的方法,也就是说当调用到具体方法的时候会去回调这个方法

 2.然后配置ShiroConfig类


2.1首先配置SecurityManager类,一般都是这几行代码,其中的入参就是第一步配的那个AuthRealm

 

 2.2然后配置shiro的过滤规则,其中入参就是上一步配置的SecurityManager。里边分别都是登录路径(如果不设置默认会自动寻找Web工程根目录下的"/login"页面),认证成功后的路径以及没有认证的路径

2.3 配置Filter的权限控制规则


3.之后配置/login的登陆的认证,划红线的都是重点,里边首先生成一个Subject对象,然后生成touken,并且利用这个token传入到sub.login方法中,这个方法会将token传到SecurityManager,SecurityManager然后传给AuthRealm的认证方法doGetAuthenticationInfo,之后这个方法里边开始校验账号和密码的逻辑,并且利用XXXMatcher方法校验。

 4.校验通过后,可以成功登录到success页面,形成一个闭环

5.用户开始进行相关操作,比如进行查询操作,上边的有注解@RequiresRoles和@RequiresPermissions,分别用来控制角色和权限,粒度不一样


6.之后会回调AuthRealm的doGetAuthorizationInfo方法,进行校验,形成一个闭环。

  • 作者:傻蛋丫
  • 原文链接:https://blog.csdn.net/qq_36854073/article/details/120408693
    更新时间:2023年2月18日13:25:47 ,共 1356 字。