1,授权中涉及的一些概念
[1]授权:访问控制,即在应用中认证用户能否访问的系统资源(如一个页面,一个按钮等)。
[2]资源:在Web应用中反应为用户可以访问的URL。
[3]权限:表示用户在应用中是否能够访问某个资源。
[4]角色:权限的集合。
2,Shiro授权方式
[1]编程式
[2]注解式
[3]jsp/gsp标签式
3,Shiro默认拦截器
Shiro内置了很多默认的拦截器,比如身份验证,授权等相关的。默认拦截器可以参考org.apache.web.filter.mgt.DefaultFilter中的枚举拦截器。
4,Shiro授权流程
[1]授权需要继承 AuthorizingRealm 类(该类继承自 AuthenticationRealm 类),并重写其 doGetAuthorizationInfo() 方法。
[2]多Realm授权的通过标准,多Realm应用下,使用ModularRealmAuthorizer授权器,只要有一个Realm授权就算通过。在ModularRealmAuthorizer循环授权的时候,还是走的第[1]条的流程,所以不用担心。
############################### Shiro jsp标签库 ##########################################
Shiro 提供了JSTL标签用于在JSP/GSP页面进行权限控制,如根据认证用户相应的页面按钮。
首先,需要导入标签库:
<%@ taglib uri="http://org.apache.shiro/tags" uri="shiro" %>
1,guest标签
游客登陆时,显示标签体内的内容。
2,authenticated标签
用户认证通过,显示标签体内的内容。
3,noAuthenticated标签
用户未通过认证(包括【记住我】方式登陆),显示标签体内的内容。
4,principal标签
显示用户身份信息,如果realm传递的principal是一个对象,可以使用该标签的property来显示具体属性的值。
5,hasRole和hasAnyRoles
拥有指定的角色,显示标签体内的内容。
6,lacksRole
没有指定的角色,显示标签体内的内容。
7,hasPermissioin和hasAnyPermissions
拥有指定的权限,显示标签体内的内容。
8,lacksPermission
没有指定的角色,显示标签体内的内容。
############################### Shiro 注解 ##########################################
shiro注解用在Service和Controller层,但是如果Service层有事物注解,那么shiro注解要放在Controller层。因为两个代理对象在类型转换时会出现异常。
1,RequiresAuthentication
要求用户已经被认证过。
2,RequiresGuest注解
要求访客才能访问。
3,RequiresPermissions
要求拥有指定的权限。
4,RequiresRoles
要求拥有指定的角色。
如果达不到注解所需要的要求,会抛出异常。