文章11 | 阅读 6092 | 点赞0
Thymeleaf-extras-Spring Security 概述
Thymeleaf-extras-Spring Security 权限控制
1、spring-security 是 spring 提供身份验证和授权的安全框架,用于后台编码,对于前端页面,Thymeleaf 模板引擎对它提供了良好的支持。
2、Spring boot 内置 thymeleaf作为模板引擎,启动器为 spring-boot-starter-thymeleaf,但这个组件只是提供了 Thymeleaf 的核心功能,并没有 spring-security 安全组件的标签。
3、thymeleaf 官网 根据功能不同,提供了不同的组件支持,其中支持 spring-security 的是 **thymeleaf-extras-springsecurity **
Module | Repository |
---|---|
Core library | https://github.com/thymeleaf/thymeleaf |
Spring integration | https://github.com/thymeleaf/thymeleaf-spring |
Documentation | https://github.com/thymeleaf/thymeleaf-docs |
Testing library | https://github.com/thymeleaf/thymeleaf-testing |
Test suites | https://github.com/thymeleaf/thymeleaf-tests |
Benchmarks | https://github.com/thymeleaf/thymeleaf-benchmarks |
Spring Security integration | https://github.com/thymeleaf/thymeleaf-extras-springsecurity |
Java 8 Time API compatibility | https://github.com/thymeleaf/thymeleaf-extras-java8time |
Tiles 2 integration | https://github.com/thymeleaf/thymeleaf-extras-tiles2 |
IE Conditional Comments support | https://github.com/thymeleaf/thymeleaf-extras-conditionalcomments |
4、thymeleaf-extras-springsecurity 是 Thymeleaf 的附加模块,不属于 Thymeleaf 核心的一部分,同样遵循它自己的版本化模式),但得到了 Thymeleaf 团队的完全支持。Thymeleaf 根据 Spring Security 的不同版本提供了自己对应的版本:
thymeleaf-extras-springsecurity3 for integration with Spring Security 3.x
thymeleaf-extras-springsecurity4 for integration with Spring Security 4.x
thymeleaf-extras-springsecurity5 for integration with Spring Security 5.x
5、thymeleaf-extras-springsecurity 的 Maven 依赖 groupId 与 artifactId 写法如下:
| groupId | org.thymeleaf.extras |
| artifactId | Spring Security 3 integration package: thymeleaf-extras-springsecurity3<br> Spring Security 4 integration package: thymeleaf-extras-springsecurity4<br> Spring Security 5 integration package: thymeleaf-extras-springsecurity5 |
6、thymeleaf-extras-springsecurity 方言所有版本的名称空间是 http://www.thymeleaf.org/extras/spring-security),使用不正确的命名空间虽然不会影响模板的处理,但是,当涉及到模板中的建议/自动补全等问题时,它可能会影响您的 IDE:
<html xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
1、本文环境:Spring boot 2.1.3 + Spring Security5.1.4 + Thymeleaf-extras-springsecurity5 :
关于 Spring Security 的内容,可以参考《Spring Security 安全框架概述 与 快速入门》
关于 Thymeleaf 的内容,可以参考《Thymeleaf 模板引擎简介 与 Spring Boot 整合入门》
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/>
<!-- lookup parent from repository -->
</parent>
<groupId>www.wmx.com</groupId>
<artifactId>spring-security-app</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-security-app</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- Spring security 安全组件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- Thymeleaf 模板引擎-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- Thymeleaf 整合 Spring Security 组件-->
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>
<!-- web组件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring boot 测试模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- spring security 测试模块-->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
<!--添加热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--fork:如果没有该项配置,整个devtools不会起作用-->
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
</project>
2、后台代码和平常没什么区别,不同点是前端 html 页面中使用 thymeleaf 标签即可:
<!DOCTYPE html>
<!--<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/extras/spring-security">-->
<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
<head lang="en">
<meta charset="UTF-8">
<title>蚩尤后裔</title>
</head>
<body>
<h2>欢迎来到大熊山</h2>
<div sec:authorize="!isAuthenticated()">
<span style="color: red">温馨提示:使用前请先登录<a th:href="@{/login}">登录</a></span>
</div>
<div sec:authorize="isAuthenticated()">
当前登录用户:<span sec:authentication="name">zhangWuJi</span> 当前角色:<span
sec:authentication="principal.authorities"></span><br>
<a href="#" th:href="@{/logout}">注销</a><br><br>
</div>
<fieldset>
<legend>学生管理</legend>
<div sec:authorize="hasRole('topLevel')">
<a th:href="@{/user/addUser}">添加学生</a><br><br>
</div>
<div sec:authorize="hasAnyRole('topLevel','senior')">
<a th:href="@{/user/deleteUser/101}">删除学生</a><br><br>
</div>
<div sec:authorize="hasAnyRole('topLevel','senior','middleRank')">
<a th:href="@{/user/updateUser}">修改学生</a><br><br>
</div>
<a th:href="@{/user/findAllUsers}">查询学生</a><br><br>
</fieldset>
</body>
</html>
xmlns:sec="http://www.thymeleaf.org/extras/spring-security" | <html> 中加入命名空间 xmlns:sec,这样 IDE 在编写标签的时候就会有提示信息。不加也不影响运行。 |
sec:authorize="!isAuthenticated()" | 判断当前用户是否已经进行用户认证,已经认证通过时返回 true,继续执行里面的内容,否则不执行。"!"表示取反。 |
sec:authentication="name" | 获取当前认证用户的用户名,也就是后台 configure(AuthenticationManagerBuilder auth) 方法中 withUser("xxx") 设置的用户名称。值会作为标签提的内容。 |
sec:authentication="principal.authorities" | 获取当前认证用户的角色,因为一个用户可以有多个角色,所以值是一个数组。 |
sec:authorize="hasRole('topLevel')" | 判断当前用户如果有 topLevel 角色则返回 true,同时指向里面的内容,否则不执行 |
sec:authorize="hasAnyRole('topLevel','senior')" | 判断当前用户是否有 'topLevel' 角色,或者 'senior'角色,有则继续指向内部的内容,否则不执行。(完全对应后台 http.authorizeRequests() 设置的角色) |
3、下面以用户 yangGuo 可以访问 updateUser、findAllUsers 方法 为例进行演示:
查询学生针对所有用户开放,所以未登录时也可以访问。
未登录时无法看到用于权限的内容,登录后也只能看到自己角色权限之内的内容。
更多关于 Thymeleaf-Extras-SpringSecurity 插件的内容参考官网:https://github.com/thymeleaf/thymeleaf-extras-springsecurity
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://wangmaoxiong.blog.csdn.net/article/details/88946175
内容来源于网络,如有侵权,请联系作者删除!