Shiro-JSP标签库
2020-05-28 本文已影响0人
李白不喜欢杜甫
简介
Apache Shiro提供了Subject-aware JSP / GSP标记库,该库可让您根据当前Subject的状态来控制JSP,JSTL或GSP页面输出。这对于基于查看网页的当前用户的身份和授权状态来个性化视图非常有用。
标签库的配置
标签库描述符(TLD)文件捆绑shiro-web.jar在该META-INF/shiro.tld文件中。要使用任何标记,请将以下行添加到JSP页面顶部(或定义页面指令的任何位置):
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
guest标签
- 使用场景:
当subject是"客人"角色时,比如说在subject中没有身份的人,没有记住用户也么没有通过认证,标签才会显示包装内容, - 使用案例:
<shiro:guest>
Hi there! Please <a href="login.jsp">Login</a> or <a href="signup.jsp">Signup</a> today!
</shiro:guest>
user标签
- 使用场景:
user
仅当当前Subject
被视为“用户”时,标签才会显示其包装内容。在这种情况下,“用户”被定义为Subject
具有已知身份的用户,无论是通过成功的身份验证还是通过“ RememberMe”服务。请注意,此标签在语义上与guest标签不同,后者比此标签更具限制性。 - 使用案例:
<shiro:user>
Welcome back John! Not John? Click <a href="login.jsp">here<a> to login.
</shiro:user>
注意:该user
标签是的逻辑相反的guest
标签
authenticated标签
- 使用场景:仅当当前用户在当前会话期间成功通过身份验证时,才显示正文内容。它比'user'标签更具限制性。在逻辑上与“ notAuthenticated”标记相反。
authenticated
仅当当前会话在当前会话期间Subject
成功通过身份验证时,标记才会显示其包装内容。与user相比,它是限制性更强的标签,用于确保敏感工作流程中的身份。 - 使用案例:
<shiro:authenticated>
<a href="updateAccount.jsp">Update your contact information</a>.
</shiro:authenticated>
noAuthenticated标签
- 使用场景:没用通过身份认证的用户
- 使用案例:
<shiro:notAuthenticated>
Please <a href="login.jsp">login</a> in order to update your credit card information.
</shiro:notAuthenticated>
注意:该notAuthenticated
标签是的逻辑相反的authenticated
标签。
principal标签
- 使用场景:该
principal
标签将输出Subject的[principal
](识别属性),或主要的属性。没有任何标签属性,标签将呈现toString()
主体的值。例如(假设主体是字符串用户名): - 使用案例:
Hello, <shiro:principal/>, how are you today?
注意:其实就是我们在用户验证成功时创建的一个用户变量,可以是一个字符串也能是一个对象,如果是字符串直接调用就好,如果是对象,调用属性是加入property="属性名即可"。
hasRole标签
- 使用场景:hasRole仅当为当前Subject角色分配了指定角色时,标签才会显示其包装内容。
- 使用案例
<shiro:hasRole name="administrator">
<a href="admin.jsp">Administer the system</a>
</shiro:hasRole>
lacksRole标签
- 使用场景:如果当前Subject 没有分配指定的角色,该lacksRole标签将显示它的包裹内容。
- 使用案例:
<shiro:lacksRole name="administrator">
Sorry, you are not allowed to administer the system.
</shiro:lacksRole>
hasAnyRole标签
- 使用场景:有标签中的任何一个角色都将会显示内容。
- 使用案例:
<shiro:hasAnyRoles name="developer, project manager, administrator">
You are either a developer, project manager, or administrator.
</shiro:hasAnyRoles>
hasPermission标签
- 使用场景:lacksPermission仅当当前Subject 不(暗示)指定的权限时,标签才会显示其包装内容。即,用户不具有指定的能力。
- 使用案例:
<shiro:lacksPermission name="user:delete">
Sorry, you are not allowed to delete user accounts.
</shiro:lacksPermission>