spingboot2.1.5+thymeleaf2.0+shiro1.4无效,配置如下。
@Bean(name = "shiroDialect")
public ShiroDialect shiroDialect(){
return new ShiroDialect();
}
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.4.0</version>
<dependency>
<groupId>com.github.theborakompanioni</groupId>
<artifactId>thymeleaf-extras-shiro</artifactId>
<version>2.0.0</version>
</dependency>
<html lang="en" xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
最终选择js的方式解决:
html需要权限的标签:
<li id="jkjlmenu" style="display: none" class="layui-nav-item"></li>
js、controller添加如下代码,通过url访问后台获取权限判断该标签是否展示:
$(function () {
judgeAuthority();
})
function judgeAuthority() {
$.post(
"/queryAuth",
function (data) {
for (var i = 0; i < data.length; i++) {
if (data[i] == "first:menu") {
document.getElementById("jkjlmenu").style.display = "";//显
}
}
},'json');
}
@RequestMapping("/queryAuth")
@ResponseBody
@RequiresPermissions("menuPermission")
public List<String> queryAuth(HttpServletRequest request) {
Subject subject= SecurityUtils.getSubject();
List<String> roleList=new ArrayList<String>();
roleList = (List<String>) subject.getSession().getAttribute("permission");
return roleList;
}
realm处理权限时,要添加到session中,方便在js处理时获取当前用户权限。
@RequiresPermissions("menuPermission")
添加是因为shiro只有在访问有权限限制时才会通过 AuthorizationInfo
添加权限。
menuPermission
可以通过后台直接添加所有用户都有该权限,只是充当门的作用,方便之后权限的获取及处理。
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) {
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
//方便前台权限获取
Subject subject= SecurityUtils.getSubject();
//为用户授权
User user = (User) SecurityUtils.getSubject().getPrincipal();
List<Permission> permissionList = loginService.getPermissionByName(user.getUsername());
//单独定义一个集合
List<String> permissions = new ArrayList<String>();
if(permissions!=null){
for(Permission permission:permissionList){
//将数据库中的权限标签 放入集合
permissions.add(permission.getPermissionCode());
}
}
info.addStringPermissions(permissions);
info.addStringPermission("menuPermission");
subject.getSession().setAttribute("permission",permissions);
return info;
}