shiro实现HasAnyPermission 标签效果
2015-07-29 18:15
2161 查看
在使用shiro 的时候发现,有hasAnyRole 却没有hasAnyPermission的标签,感觉很疑惑,有时我控制页面的显示的时候就是需要这种,比如:
一个菜单下面有3个子菜单
|-菜单栏目一
|——-|–子栏目一
|——-|–子栏目二
像这样,这时,假设子栏目一显示的条件是hasPermission p1, 子栏目二是p2,那么我们可以认为父级(菜单栏一,只需要在有p1或者p2的情况下就显示),这时就需要一个 类似hasAnyRole的标签-hasAnyPermssion ( 当然,实现这种需要还有其他的方法,我暂时没有想到,用shiro 不是很久。。。。)
具体实现时候,实现是一个HasAnyPermissionTag 类,然后把shiro-web.jar 里面的shiro.tld 里面加入自己定义的标签就行
HasAnypermissionTag 代码如果(查看HasAnyRoleTag 就发现,类似的写法)
在shiro.tld中加入自己的标签
在这个文件中加入一个新的标签就可以了,tag-class 对应自己写的标签就行了。
在要使用的地方
<shiro:hasAnyPermission ame=”p1,p2”></shiro:hasAnyPermission> 就可以 了
一个菜单下面有3个子菜单
|-菜单栏目一
|——-|–子栏目一
|——-|–子栏目二
像这样,这时,假设子栏目一显示的条件是hasPermission p1, 子栏目二是p2,那么我们可以认为父级(菜单栏一,只需要在有p1或者p2的情况下就显示),这时就需要一个 类似hasAnyRole的标签-hasAnyPermssion ( 当然,实现这种需要还有其他的方法,我暂时没有想到,用shiro 不是很久。。。。)
具体实现时候,实现是一个HasAnyPermissionTag 类,然后把shiro-web.jar 里面的shiro.tld 里面加入自己定义的标签就行
HasAnypermissionTag 代码如果(查看HasAnyRoleTag 就发现,类似的写法)
package org.apache.shiro.web.tags; import org.apache.shiro.subject.Subject; /** * 扩展标签,具有列出权限中的任意一个 * @author yehuan * */ public class HasAnyPermissionTag extends PermissionTag { /** * */ private static final long serialVersionUID = 1L; public HasAnyPermissionTag() { } protected boolean showTagBody(String permissions) { boolean hasAnyPermissions = false; Subject subject = getSubject(); if (subject != null) { for (String role : permissions.split(",")) { if (subject.isPermitted(role.trim())) { hasAnyPermissions = true; break; } } } return hasAnyPermissions; } }
在shiro.tld中加入自己的标签
<tag> <name>hasAnyPermission</name> <tag-class>org.apache.shiro.web.tags.HasAnyPermissionTag</tag-class> <body-content>JSP</body-content> <description>Displays body content only if the current Subject (user) 'has' (implies) the specified permission (i.e the user has the specified ability). </description> <attribute> <name>name</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag>
在这个文件中加入一个新的标签就可以了,tag-class 对应自己写的标签就行了。
在要使用的地方
<shiro:hasAnyPermission ame=”p1,p2”></shiro:hasAnyPermission> 就可以 了
相关文章推荐
- Serv-U 550 Permission denied 的解决办法
- FTP 550 Permission denied 只能建文件夹,没法删除及上传文件的原因说明
- Apache Shiro 使用手册(一) Shiro架构介绍
- PHP使用Session遇到的一个Permission denied Notice解决办法
- Apache Shiro 使用手册(二) Shiro 认证
- Apache Shiro 使用手册(五) Shiro 配置说明
- Apache Shiro 使用手册(四) Realm 实现
- Apache启动错误Permission denied: httpd: could not open error log file解决方法
- Android中Permission权限机制的具体使用
- Android中的Permission权限机制介绍
- 让Apache Shiro保护你的应用
- 基于Spring框架的Shiro配置方法
- 使用Shiro实现登录成功后跳转到之前的页面
- apache You don't have permission to access /test.php on this server解决方法
- Spring+mybatis+shiro+freemarker+ehcache+ldap+mongo
- 第四章 INI配置
- 第五章 编码/加密
- 第六章 Realm及相关对象
- Shiro预览
- JFinal-Beetl-Shiro(JdbcRealm)-例子