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
Después de explorar en el artículo anterior, esta vez descubriremos doGetAuthorizationInfo
el método directamente; echemos un vistazo a ShiroRealm, que hereda AuthorizingRealm
3. Clase AuthorizingRealm
En AuthorizingRealm, doGetAuthorizationInfo
puede ubicar getAuthorizationInfo(PrincipalCollection principals)
el método mediante la búsqueda de búsqueda
1, Colección Principal
En getAuthorizationInfo(PrincipalCollection principals)
el método, hay PrincipalCollection
un 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 doGetAuthenticationInfo
autenticarse, al nuevo objeto SimpleAuthenticationInfo se le asigna un PrincipalCollection
valor.Finalmente, de acuerdo con la función, la clase y la gran conjetura, la clase AuthorizingRealm getAuthorizationInfo(PrincipalCollection principals)
es PrincipalCollection principals
creada por el objeto SimpleAuthenticationInfo.
2. La parte de la caja azul en la clase AuthorizingRealm
Al juntar AuthorizingRealm y AuthenticatingRealm, puede encontrar que getAuthorizationInfo
el marco rojo mediano y grande de AuthorizingRealm getAuthenticationInfo
es 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é.
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 principals
azul es Username
[token.getPrincipal ()].
Luego use principals
o Username
vaya 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.
Entra y mira su clase de implementación DelegatingSubject, y mira securityManager.isPermitted(getPrincipals(), permission)
los métodos que contiene. (Apareció SecurityManager)
Después de ingresar AuthorizingRealm para ver isPermitted
el método, puede ver que getAuthorizationInfo(principals)
el método finalmente se usó para devolver información.
En orden, la última ejecución de isPermitted obtiene perm
los permisos del usuario en la base de datos y los permisos definidos por la interfaz permission
, y pasa si el perm contiene permiso.