JSP / GSP 标签库简介
在Apache Shiro中提供了一个身份的感知JSP/GSP标签库,它允许你控制你的 JSP,JSTL或者GSP的页面输出基于当前身份的状态。对于基于当前用户显示的网页的身份和授权状态的个性化视图是很有用的。
标签库的配置
标签库的描述文件(TLD)文件是放在shiro-web.jar包中META-INF/shiro.tld文件中。为了能够使用任意标签,需要添加下面这句话到JSP页面的顶部:
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
我们已经使用shiro前缀来标识Shiro标签库的命名空间,但是你可以指定任何你喜欢的名字。
guest标签
guest标签显示它的包裹内容只是当前用户的身份是游客身份访问的内容。一个游客可以是任何一个没有认证的身份用户。
<shiro:guest>
嗨,我是游客身份偶! <a href="login.jsp">登录</a> 或者 <a href="signup.jsp">注册</a>
</shiro:guest>
游客即没有登录的用户身份。
user标签
user标签显示的它包裹的内容只是当前的身份被认为是一个‘用户’。一个用户可以理解为在上下文中被定义为一个被知道的身份,或者来自于一个成功授权身份或者来自于‘记住我’的服务。user标签的语义和authenticated标签是不一样的,该标签比此标签更具限制性。
<shiro:user>
欢饮回来 朋友! 不是朋友? 点击 <a href="login.jsp">这里<a> 去登录。
</shiro:user>
user标签和guest标签逻辑是相反的,用户已经身份验证/记住我登录后显示相应的信息。
authenticated标签
authenticated标签包裹的内容只是在他们的当前session中已经成功认证的用户。它是更加严格的比‘user’标签。它的逻辑是相反的相对‘notAuthenticated’标签。
<shiro:authenticated>
<a href="updateAccount.jsp">更新你的联系人信息</a>.
</shiro:authenticated>
表示当前用户已经被认证,即用户已经登录成功。
notAuthenticated标签
<shiro:notAuthenticated>
请 <a href="login.jsp">登录</a>为了能够更新你的信用卡信息.
</shiro:notAuthenticated>
authenticated标签和notAuthenticated标签逻辑是相反的,表示当前用户没有登录验证成功。
principal标签
显示用户身份信息,默认调用Subject.getPrincipal()获取,即Primary Principal。
哈喽, <shiro:principal/>, 今天你怎么样?
相当于
哈喽, <%= SecurityUtils.getSubject().getPrincipal().toString() %>, 今天你怎么样?
打印用户ID
用户ID: <principal type="java.lang.Integer"/>
相当于
用户ID: <%= SecurityUtils.getSubject().getPrincipals().oneByType(Integer.class).toString() %>
读取属性值
哈喽, <shiro:principal property="firstName"/>, 今天你怎么样?
相当于
哈喽, <%= SecurityUtils.getSubject().getPrincipal().getFirstName().toString() %>,今天你怎么样?
hasRole标签
<shiro:hasRole name="administrator">
<a href="admin.jsp">Administer the system</a>
</shiro:hasRole>
hasRole标签和 lacksRole标签逻辑是相反的,标签当前用户是否有某个角色。
lacksRole标签
<shiro:lacksRole name="administrator">
Sorry, you are not allowed to administer the system.
</shiro:lacksRole>
lacksRole标签和hasRole标签逻辑是相反的,表示没有当前当前角色信息。
hasAnyRole标签
<shiro:hasAnyRoles name="developer, project manager, administrator">
You are either a developer, project manager, or administrator.
</shiro:lacksRole>
表示有多个角色中的某一个角色即通过验证。
hasPermission标签
<shiro:hasPermission name="user:create">
<a href="createUser.jsp">Create a new User</a>
</shiro:hasPermission>
表示当前用户是否具有某个权限。
lacksPermission标签
<shiro:lacksPermission name="user:delete">
Sorry, you are not allowed to delete user accounts.
</shiro:hasPermission>
表示当前用户不具有某个权限。