1.动态菜单实现
在上一篇博客中,我们实现了通过shiro向用户受援权限的操作,对于当用户请求某一资源时向他授予的权限其实就是从数据库中查询出来的他所拥有的权限,所以当前他请求的资源到底能不能请求到,具体还要看他拥有的权限是否包含对于当前请求资源权限,包含则请求成功;不包含则请求失败,重定向到未授权页面在spring security中,我们还实现了动态菜单的效果,即用户登陆之后不会将所有的资源都展示给用户,而是用户有对应的角色/权限,才将其权限范围内的资源展现出来,在spring security中我们通过整合thymeleaf实现了该功能;在shiro中我们也可以通过整合thymeleaf实现该功能
导入依赖
<dependency>
<groupId>com.github.theborakompanioni
</groupId>
<artifactId>thymeleaf-extras-shiro
</artifactId>
<version>2.0.0
</version>
</dependency>
spring security在导入依赖之后就可以直接使用,但是shiro导入依赖之后我们需要进行一些配置才能正常的使用整合之后的功能;配置也很简单,就是将ShiroDialect 类装配到spring容器中即可,ShiroDialect (shiro方言)
@Bean
public ShiroDialect
shiroDialect(){
return new ShiroDialect();
}
前端导入命名空间xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"
注意是导入这个命名空间,导入其他的都没有提示,写起来比较痛苦使用整合之后的前缀实现动态菜单,这里使用前缀shiro的时候用法可以参考前面的spring security
<div >
<div shiro:notAuthenticated>
<a th:href="@{/toLogin}">登陆
</a>
</div>
<div shiro:authenticated>
<div shiro:hasPermission="user:add" style="display: inline">
<a th:href="@{/user/add}">add
</a>
</div>
<div shiro:hasPermission="user:update" style="display: inline">
<a th:href="@{/user/update}">update
</a>
</div>
<div style="display: inline">
<a th:href="@{/logout}">logout
</a>
</div>
</div>
</div>
测试 测试成功!