js里面可以直接写shiro 标签吗

js里面可以直接写shiro 标签吗,第1张

JSP中直接引用Shiro标签比较简单可以参考JSP

/ GSP 标签库-Shiro权限学习1:http://blog.csdn.net/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(',')

在ShiroRealm 中 对所有 引入的service 加上注解 @Lazy ,防止 事务回滚失败。 具体原因看该文章

新增整合swagger2,因为之前整合了shiro,所以再访问swagger的时候总是被拦截导致无法访问,因此在ShiroConfiguration配置文件中,放开对swagger的拦截

新增CORS跨域配置。

待解决问题:前端利用vue传sessionid,后台通过shiro接收一直接收不到,后前端改成jQuery才可以,不知道问题出在哪

新增@RequiresRoles角色控制,个人感觉@RequiresRoles角色控制,属于粗粒度,@RequiresPermissions属于细粒度,因为@RequiresPermissions能给每个接口定义不同的权限

如下:

@RequiresRoles(value = "admin")

@RequiresPermissions("user:updateSysUser")

两者属于and 的关系,同时添加注解,会先验证此接口是否有规定的角色,然后验证是否有该权限,必须同时满足才会通过认证

@RequiresPermissions多权限是分两种的,这里要注意

第一种:必须全部符合(默认不写或者在后面添加logical = Logical.AND)

@RequiresPermissions(value={“studentMan:find_record_list”,“teacher:find_record_list”})

上面这种情况是默认当前对象必须同时全部拥有指定权限

第二种:符合其中一个即可(logical = Logical.OR)

@RequiresPermissions(value={“studentMan:find_record_list”,“teacher:find_record_list”},logical=Logical.OR)

上面这种情况则是只要有其中一个权限即可访问

pom文件

主要目的通过sessionid验证用户的登录状态

权限表

角色表

大家好,一直以来我都本着用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 「基础知识」 的铺垫。目前正在出一个 SpringBoot 长期系列教程,从入门到进阶, 篇幅会较多~

「大佬可以绕过 ~」

如果你是一路看过来的,很高兴你能够耐心看完。之前带大家学了 Springboot 基础部分,对基本的使用有了初步的认识, 接下来的几期内容将会带大家进阶使用,会先讲解基础 中间件 的使用和一些场景的应用,或许这些技术你听说过,没看过也没关系,我会带大家一步一步的入门,耐心看完你一定会有 收获 ~

上期带大家学习了 Shiro 的基本使用,实现了用户认证功能,本期将带大家学习 Shiro 中如何存储 cookie 。同样的,我们集成到 Springboot 中。

上期我们遗留了一个小问题,就是用户打开浏览器登录后,再关闭,然后又跳回了登录页。那么如何去解决这个问题 其实很简单,让我们的服务器记住它不就好了,想让它失效,就给一个 过期时间

ShiroConfig 类中添加如下方法:

修改 securityManager() 方法

修改认证路径, user 指的是用户认证通过或者配置了 Remember Me 记住用户登录状态后可访问

最后修改我们的控制器,在登录调用的时候传入是否记住:

大家试着运行一下 ~

本期内容就到这里结束了,总结一下,本节主要讲了 Shiro 如何记住用户登录状态以及相关实现,大家可以自己多试试


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11312741.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存