项目中使用shiro权限控制,但是权限标签只有
<@shiro.hasPermission name="3020101">
无法判断多个值 如3020101,3020102,3020103
需要扩展一个自定义
hasAnyPermissions
查了很多资料发现都是去扩展jsp标签改动比较复杂
然后看了下Freemarker 引入shiro权限标签的配置文件
再看这个SHiroTgs的文件如下
那么我们再创建一个自定义Tag文件在new 完之后put进去应该就可以了
创建文件如下
import com.jagregory.shiro.freemarker.PermissionTag; import org.apache.shiro.subject.Subject; public class HasAnyPermissionsTag extends PermissionTag { private static final long serialVersionUID = 1L; private static final String PERMISSION_NAMES_DELIMETER = ","; public HasAnyPermissionsTag() { } @Override protected boolean showTagBody(String permissions) { boolean hasAnyPermission = false; Subject subject = getSubject(); if (subject != null) { for (String permission : permissions .split(PERMISSION_NAMES_DELIMETER)) { if (subject.isPermitted(permission.trim())) { hasAnyPermission = true; break; } } } return hasAnyPermission; } }
再更改配置文件如下
@Component public class FreemarkerShiroConfig implements InitializingBean { @Autowired private freemarker.template.Configuration configuration; @Override public void afterPropertiesSet() throws Exception { ShiroTags tags = new ShiroTags(); tags.put("hasAnyPermissions", new HasAnyPermissionsTag()); configuration.setSharedVariable("shiro", tags); } }
页面上使用如下
<@shiro.hasAnyPermissions name="3020101,3020103"> <#include "order/*.ftl" /> </@shiro.hasAnyPermissions>
重启项目验证下权限ok了