SpringBoot-Thymeleaf中使用Shiro标签
在之前权限控制中,当用户访问没有权限的资源时,采取的做法是跳转到403.html
没有权限页面,在实际项目中更为常见的做法是只显示当前用户拥有访问权限的资源,没有权限的直接为不可见。配合Thymeleaf
中的Shiro
标签可以很简单的实现这个目标。
实际上Thymeleaf官方并没有提供Shiro的标签,我们需要引入第三方实现,地址为**thymeleaf-extras-shiro**
1.引入thymeleaf-extras-shiro
依赖:
<dependency>
<groupId>com.github.theborakompanioni</groupId>
<artifactId>thymeleaf-extras-shiro</artifactId>
<version>2.0.0</version>
</dependency>
2. 在ShiroConfig.java
增加配置
/**
* 注册这个bean目的就是为了在thymeleaf中使用shiro的自定义tag。
*
* @return at.pollux.thymeleaf.shiro.dialect.ShiroDialect
* @author: zhihao
* @date: 2019/12/16
*/
@Bean
public ShiroDialect shiroDialect() {
return new ShiroDialect();
}
3, 首页index.html
改造
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.w3.org/1999/xhtml">
<!--需要注意要使用shiro标签得加上xmlns:shiro="http://www.w3.org/1999/xhtml"-->
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<p>[[${user.username}]]帅哥你好!</p>
<div>
<a shiro:hasPermission="user:user" th:href="@{/list}">获取用户信息</a>
<a shiro:hasPermission="user:add" th:href="@{/add}">新增用户</a>
<a shiro:hasPermission="user:delete" th:href="@{/delete}">删除用户</a>
</div>
<p shiro:hasRole="admin">你的角色为超级管理员</p>
<p shiro:hasRole="test">你的角色为测试账户</p>
<a th:href="@{/logout}">注销</a>
</body>
</html>
4. 进行测试,拥有权限的才可见
扩展资料:
标签说明:
以下示例说明如何将标签集成到Thymeleaf模板中。这些都是Apache Shiro文档的JSP / GSP标记库部分中给出的示例的全部实现。
标签可以用属性或元素符号表示:
<p shiro:guest="">
Please--验证当前用户是否为“访客”,即未认证(包含未记住)的用户 <a href="login.html">Login</a>
</p>
<p shiro:user="">
Welcome back John! Not John? Click <a href="login.html">here<a> to login.认证通过或已记住的用户出现
</p>
<a shiro:authenticated="" href="updateAccount.html">Update your contact information已认证才会出现</a>
<p shiro:notAuthenticated="">
Please <a href="login.html">login</a> in order to update your credit card information.
未认证才会出现
</p>
<p>Hello, <span shiro:principal=""></span>, 输出了用户信息</p>
<p>Hello, <shiro:principal/>输出了用户信息</p>
<p shiro:hasRole="admin" >
用户拥有管理员角色才会出现
</p>
<p shiro:lacksRole="admin">
用户缺管理员角色才会出现
</p>
<p shiro:hasAllRoles="admin,test">
用户拥有管理员和测试角色才会出现123123
</p>
<p shiro:hasAnyRoles="admin,test">
用户拥有管理员或者测试角色才会出现
</p>
<p shiro:hasPermission="user:add">
用户拥有添加权限才会出现
</p>
<p shiro:lacksPermission="user:delete">
用户缺少删除权限才会出现
</p>
<p shiro:hasAllPermissions="user:add, user:user">
验证当前用户是否拥有所有权限才会出现
</p>
<p shiro:hasAnyPermissions="user:add, user:user">
验证当前用户是否拥有以下任意一个权限才会出现
</p>