JS中处理Shiro的权限标签问题

Shiro权限标签在JS中的处理
本文介绍了在JavaScript中遇到Shiro权限标签不起作用的问题及其解决方案。一种方法是在JSP中直接使用Shiro标签,另一种是在后台查询用户权限并存入Session,由JS动态判断并生成HTML。此外,还分享了如何从Session获取权限数据并在前端进行URL权限判断。
               

JSP中直接引用Shiro标签比较简单可以参考JSP / GSP 标签库-Shiro权限学习1:http://blog.youkuaiyun.com/ahou2468/article/details/71130582

JS中引用Shiro的标签不起作用的问题解决方法:

1.第一种情况假如js中生成标签代码是固定死的解决起来比较容易,直接在需要权限判断标签前和后加上权限控制标签,即可以起作用

<divid="leftnav"class="site-text"lay-filter="left">

</div>

<scripttype="text/javascript">

var ulHtml;

ulHtml += '<shiro:hasRole name="999999">'

ulHtml += '<i class="layui-icon" data-icon="' + data[i].children[j].icon +'">' + data[i].children[j].icon +'</i>';

ulHtml +='</shiro:hasRole>'

$('#leftnav').html(ulHtml);

</script>

,但是假如Shiro标签name参数使动态传进去的则Shiro标签作用失效了,会导致是Shiro标签中所的html标签不管有没有权限都不显示,事例:

<div id="leftnav" class="site-text" lay-filter="left">

</div>

<script type="text/javascript">

var ulHtml;

var name = "999999";

ulHtml += '<shiro:hasRole name="'+name+'">'

ulHtml += '<i class="layui-icon" data-icon="' + data[i].children[j].icon + '">' + data[i].children[j].icon + '</i>';

ulHtml +='</shiro:hasRole>'

$('#leftnav').html(ulHtml);

</script>

这种情况我的解决方案是,在后台查询到用户的权限数据时直接放到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<String> roles = roleService.findRoleByUserId(userId);

info.setRoles(roles);

//根据用户ID查询权限(permission),放入到Authorization里

Set<String> 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(',');


           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.youkuaiyun.com/jiangjunshow

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值