thymeleaf编写前端web页面时需要根据权限对一些菜单进行显示控制,后端使用springsecurity进行认证
写页面时控制新增按钮只有管理员界面出现
<span sec:authorize="hasRole('ADMIN')" ><button class="layui-btn layuiadmin-btn-useradmin" data-type="edit">编辑</button></span>
但sec:authorize=“hasRole(‘ADMIN’)”,没有生效。
解决方法:
看到很多都说过跟版本有关,就改了版本,以为生效了,其实并没有
其实是跟后端接口传的角色名称有关。
页面中使用hasRole去判断,后台接口中的authorities中存放的是必须是“ROLE_”开头的角色名,在页面中可以带“ROLE_”,也可以不带。即
<span sec:authorize="hasRole('ADMIN')" >管理员</span>
<span sec:authorize="hasRole('ROLE_ADMIN')" >管理员</span>
两种用法是一样的。
但如果后台接口中authorities中存放的是“ADMIN”等不以“ROLE_”开头的角色名,前端页面可以采用hasAnyAuthority来判断,即
<span sec:authorize="hasAnyAuthority('ADMIN')">管理员</span>
解决过程中看到一些用法也记录一下
<div sec:authorize="isAuthenticated()">
<p>已登录</p>
<p>登录名:<span sec:authentication="name"></span></p>
<p>Password:<span sec:authentication="principal.password"></span></p>
<div sec:authentication="principal.authorities"></div> <!-- works fine -->
<p>Name:<span sec:authentication="principal.username"></span></p>
<p>Status:<span sec:authentication="principal.status"></span></p>
</div>