【Shiro】Cómo autorizar SimpleAuthorizationInfo

I. Introducción

Este artículo se basa en el artículo anterior para presentar cómo [Shiro] SimpleAuthenticationInfo verifica las contraseñas .

2. Clase personalizada de ShiroRealm

inserte la descripción de la imagen aquí
Después de explorar en el artículo anterior, esta vez descubriremos doGetAuthorizationInfoel método directamente; echemos un vistazo a ShiroRealm, que hereda AuthorizingRealm
inserte la descripción de la imagen aquí

3. Clase AuthorizingRealm

En AuthorizingRealm, doGetAuthorizationInfopuede ubicar getAuthorizationInfo(PrincipalCollection principals)el método mediante la búsqueda de búsqueda
inserte la descripción de la imagen aquí

1, Colección Principal

En getAuthorizationInfo(PrincipalCollection principals)el método, hay PrincipalCollectionun objeto aquí. No he estudiado de dónde vino (probablemente pasó de la capa inferior).

Pero al escribir [Shiro] Cómo SimpleAuthenticationInfo verifica las contraseñas , noté que al doGetAuthenticationInfoautenticarse, al nuevo objeto SimpleAuthenticationInfo se le asigna un PrincipalCollectionvalor.Finalmente, de acuerdo con la función, la clase y la gran conjetura, la clase AuthorizingRealm getAuthorizationInfo(PrincipalCollection principals)es PrincipalCollection principalscreada por el objeto SimpleAuthenticationInfo.
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

2. La parte de la caja azul en la clase AuthorizingRealm

Al juntar AuthorizingRealm y AuthenticatingRealm, puede encontrar que getAuthorizationInfoel marco rojo mediano y grande de AuthorizingRealm getAuthenticationInfoes similar al marco azul mediano y grande de AuthenticatingRealm.
El propósito de este código es verificar si hay un caché e intentar encontrar la información de autenticación del usuario o la información de autorización del caché.
inserte la descripción de la imagen aquí
Echemos un vistazo al pequeño cuadro rojo y al pequeño cuadro azul dentro, y haga clic para verlos respectivamente, el retorno del pequeño cuadro rojo es el objeto de la clase PrincipalCollection, el retorno del pequeño cuadro principalsazul es Username[token.getPrincipal ()].
inserte la descripción de la imagen aquí
Luego use principalso Usernamevaya al caché para encontrar la correspondiente AuthorizationInfo(información de autorización) o AuthenticationInfo(información de autenticación)

3. ¿Para quién es la información de doGetAuthorizationInfo(principals)?

Esta parte es la autorización de @Override en ShiroRealm, y finalmente devuelve la información de autorización.

Aquí hay una duda: esta información es devuelta, ¿para quién es?

Veamos el método de autorización programática , principalmente usando el objeto Asunto en Shiro.

Subject subject = UserUtils.getSubject();
subject.isAuthenticated();            // 是否身份验证授权通过
subject.isPermitted(permission);      // 验证权限字符串
subject.isPermittedAll(permissions);  // 验证权限字符串全部通过
subject.hasRole(roleIdentifier);      // 验证是否有角色权限

Hay varios métodos para llamar aquí, echemos un subject.isPermitted(permission);vistazo a la interfaz Asunto.
inserte la descripción de la imagen aquí
Entra y mira su clase de implementación DelegatingSubject, y mira securityManager.isPermitted(getPrincipals(), permission)los métodos que contiene. (Apareció SecurityManager)
inserte la descripción de la imagen aquí
Después de ingresar AuthorizingRealm para ver isPermittedel método, puede ver que getAuthorizationInfo(principals)el método finalmente se usó para devolver información. inserte la descripción de la imagen aquí
En orden, la última ejecución de isPermitted obtiene permlos permisos del usuario en la base de datos y los permisos definidos por la interfaz permission, y pasa si el perm contiene permiso.

4. Diagrama resumen

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_42516475/article/details/130596415
Recomendado
Clasificación