设为首页 收藏本站
查看: 459|回复: 0

[经验分享] Apache Shiro Web应用整合-标签库

[复制链接]

尚未签到

发表于 2017-1-7 10:01:14 | 显示全部楼层 |阅读模式
Apache Shiro 提供了一个JSP/GSP 标签库,它允许你控制你的JSPJSTL GSP 页面基于当前Subject的状态进行输出。这对于根据用户身份和当前用户的授权状态来提供个性化视图是相当有用的。
标签库的描述文件(TLD)保存在shiro-web.jar里的META-INF/shiro.tld文件。要使用任何标签,需要在你JSP 页面(或任何你定义的页面指令)的顶部添加下面一行:
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
我们使用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'在上下文中被定义为一个已知身份IDSubject,或是成功通过身份验证及通过'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() %>
但如果该principal是一个复杂的对象而不是一个简单的字符串,而且你希望引用该principal 上的一个属性该怎么办呢?你可以使用property 属性来来表示property 的名称来理解(必须通过JavaBeans 兼容的getter 方法访问)。例如(假设principal 是一个User 对象):
Hello, <shiro:principal property="firstName"/>, how are you today?
这一般等价于下面:
Hello, <%= SecurityUtils.getSubject().getPrincipal().getFirstName().toString() %>, how are you today?
如果结合属性类型如下:
Hello, <shiro:principal type="com.foo.User" property="firstName"/>, how are you today?
这一般等价于下面:
Hello, <%= SecurityUtils.getSubject().getPrincipals.oneByType(com.foo.User.class).getFirstName().toString() %>, how are you today?

 
The hasRole tag
hasRole 标签将会显示它所包含的内容,仅当当前Subject 被分配了具体的角色。例如:
<shiro:hasRole name="administrator">

<a href="admin.jsp">Administer the system</a>

</shiro:hasRole>
hasRole 标签与lacksRole 标签逻辑相反。
The lacksRole tag
lacksRole 标签将会显示它所包含的内容,仅当当前Subject 未被分配具体的角色。例如:
<shiro:lacksRole name="administrator">

Sorry, you are not allowed to administer the system.

</shiro:lacksRole>
lacksRole 标签与hasRole 标签逻辑相反。
The hasAnyRole tag
hasAnyRole 标签将会显示它所包含的内容,如果当前的Subject 被分配了任意一个来自于逗号分隔的角色名列表中的具体角色。例如:
<shiro:hasAnyRole name="developer, project manager, administrator">

You are either a developer, project manager, or administrater.

</shiro:hasAnyRole>
hasAnyRole 标签目前还没有与之逻辑相反的标签。
The hasPermission tag
hasPermission 标签将会显示它所包含的内容,仅当当前Subject“拥有”(蕴含)特定的权限。也就是说,用户具有特定的能力。例如:
<shiro:hasPermission name="user:create">

<a href="createUser.jsp">Create a new User</a>

</shiro:hasPermission>
hasPermission 标签与lacksPermission 标签逻辑相反。
The lacksPermission tag
lacksPermission 标签将会显示它所包含的内容,仅当当前Subject 没有拥有(蕴含)特定的权限。也就是说,用户没有特定的能力。例如:
<shiro:lacksPermission name="user:delete">
Sorry, you are not allowed to deleted user accounts.
</shiro:hasPermission>
lacksPermission 标签与hasPermission 标签逻辑相反。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-324978-1-1.html 上篇帖子: 禁止显示Apache目录列表-Indexes FollowSymLinks 下篇帖子: Tez: 3 Runtime API in Apache Tez
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表