这种情况我的解决方案是,在后台查询到用户的权限数据时直接放到Session中,js中不通过Shiro标签判断而是自己通过获取权限的url动态判断 /** * Shiro身份认证+授权 重写 * */ public class SampleRealm extends AuthorizingRealm{ /** * 授权处理 */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollectionprincipals) { Long userId = TokenManager.getUserId(); SimpleAuthorizationInfoinfo =new SimpleAuthorizationInfo(); //根据用户ID查询角色和权限,放入到Authorization里。 Set roles = roleService.findRoleByUserId(userId); info.setRoles(roles); //根据用户ID查询权限(permission),放入到Authorization里 Set permissions = permissionService.findPermissionByUserId(userId); info.setStringPermissions(permissions); //权限数据时直接放到Session中 TokenManager.setVal2Session("permissions", permissions); returninfo; } JS中可以通过Session中获取权限数据
var pers = '<%=session.getAttribute("permissions")%>'; //将权限数据数组进行分割转为字符串数组,然后循环判断是否你访问的url元素在授权中,若在授权中动态生成html标签则显示,否则则隐藏掉 var resultpers = pers.replace('[','').replace(']','').split(',');