我们使用shiro 前缀用以表明shiro 标签库命名空间,当然你可以指定任何你喜欢的名字。
下面将分别介绍每一个标签,并展示它是如何用来渲染页面的。 The guest tag
guest 标签将显示它包含的内容,仅当当前的Subject 被认为是'guest'时。'guest'是指没有身份ID 的任何Subject。也就是说,我们并不知道用户是谁,因为他们没有登录并且他们没有在上一次的访问中被记住(RememberMe 服务)。例如:
<shiro:guest>
Hi there! Please <a href="login.jsp">Login</a> or <a href="signup.jsp">Signup</a>today!
</shiro:guest>
guest 标签与user 标签逻辑相反。 The user tag
user 标签将显示它包含的内容,仅当当前的Subject 被认为是'user'时。'user'在上下文中被定义为一个已知身份ID的Subject,或是成功通过身份验证及通过'RememberMe'服务的。请注意这个标签在语义上与authenticated 标签是不同的,authenticated 标签更为严格。例如:
<shiro:user>
Welcome back John! Not John? Click <a href="login.jsp">here<a> to login.
</shiro:user>
usre 标签与guest 标签逻辑相反。 The authenticated tag
仅仅只当当前用户在当前会话中成功地通过了身份验证authenticated 标签才会显示包含的内容。它比'user'标签更为严格。它在逻辑上与'notAuthenticated'标签相反。
authenticated 标签只有当当前Subject 在其当前的会话中成功地通过了身份验证才会显示包含的内容。它比user 标签更为严格,authenticated 标签通常在敏感的工作流中用来确保身份ID 是可靠的。例如:
<shiro:authenticated>
<a href="updateAccount.jsp">Update your contact information</a>.
</shiro:authenticated>
authenticated 标签与notAuthenticated 标签逻辑相反。 The notAuthenticated tag
notAuthenticated 标签将会显示它所包含的内容,如果当前Subject 还没有在其当前会话中成功地通过验证。例如:
<shiro:notAuthenticated>
Please <a href="login.jsp">login</a> in order to update your credit card information.
</shiro:notAuthenticated>
notAuthenticated 标签与Authenticated 标签逻辑相反。 The principal tag
principal 标签将会输出Subject 的主体(标识属性)或主要的属性。
若没有任何标签属性,则标签将使用principal 的toString()值来呈现页面。例如(假设principal 是一个字符串的用户名):
Hello, <shiro:principal/>, how are you today?
这一般等价于下面:
Hello, <%= SecurityUtils.getSubject().getPrincipal().toString() %>, how are you today?
principal 标签默认情况下,假定该principal 输出的是subject.getPrincipal()的值。但若你想输出一个不是主要principal的值,而是属于另一个Subject 的principal collection,你可以通过类型来获取该principal 并输出该值。
例如,输出Subject 的用户ID(并不是username),假设该ID 属于principal collection:
User ID: <principal type="java.lang.Integer"/>
这一般等价于下面:
User ID: <%= SecurityUtils.getSubject().getPrincipals().oneByType(Integer.class).toString() %>