Autorizacion Shiro - Tensho97/Aprende-a-Aprender GitHub Wiki
También conocida como 'Control de acceso', es el proceso mediante el que se controla el acceso a los recursos. Trasladado al contexto de una aplicación, controla quién tiene acceso a qué recursos en dicha aplicación. Existen tres elementos principales que se tienen en cuenta en Shiro:
-
Permisos: se describen los recursos y acciones disponibles cuando el 'Subject' interactúa con estos recursos. Por ejemplo, abrir un archivo o eliminar un usuario. Los permisos reflejan solamente las acciones posibles, no quien las puede hacer.
-
Roles: son entidades que engloban una serie de permisos. Existen dos tipos contemplados en Shiro:
- Roles implícitos: cuando un nombre de Rol implica una serie de permisos.
- Roles explícitos: cuando se forman colecciones de permisos en el momento actual. En esta situación, la aplicación (y también Shiro) saben exactamente qué significa tener un rol en particular. Porque conocen cada permiso que puede llevarse a cabo. No vienen implícitos en el nombre del rol. Apache Shiro recomienda esta opción, ya que aporta un mayor control en la aplicación.
- Usuarios: es la parte del 'quien' en una aplicación. Se le pueden aplicar los permisos de varias formas: directamente al usuario, a través de los roles, por grupos, etc.
Para hacer una autorización en Shiro hay 3 formas:
- Autorización programática: interactuar con el objeto Subject directamente
Subject currentUser = SecurityUtils.getSubject();
if (currentUser.hasRole("administrator")) {
//show the admin button
} else {
//don't show the button? Grey it out?
}
- Autorización con anotaciones: trabajando con una colección de anotaciones Java. Por ejemplo, para saber si el usuario está autenticado:
@RequiresAuthentication
public void updateAccount(Account userAccount) {
//this method will only be invoked by a
//Subject that is guaranteed authenticated
...
}
Que es lo mismo que:
public void updateAccount(Account userAccount) {
if (!SecurityUtils.getSubject().isAuthenticated()) {
throw new AuthorizationException(...);
}
//Subject is guaranteed authenticated here
...
}
- JSP/GSP TagLibs: puedes controlar la salida de una página JSP o GSP basándote en unos roles o permisos.
Una vez la autorización se ha realizado, actúa el Security Manager.
Autora: Vanesa