【翻译】Thymeleaf – Spring Security集成模块
原文链接:Thymeleaf - Spring Security integration modules
来源:thymeleaf/thymeleaf-extras-springsecurity自述文件
状态
这是一个Thymeleaf附加模块,不是Thymeleaf核心的一部分(因此它有自己的版本号),但是Thymeleaf团队提供全部支持。
这个仓库包含3个项目:
- thymeleaf-extras-springsecurity5是与Spring Security 5.x相匹配的集成模块
- thymeleaf-extras-springsecurity6是与Spring Security 6.x相匹配的集成模块
当前版本:
- 3.0.4.RELEASE适用于Thymeleaf 3.0(要求Thymeleaf版本高于或等于3.0.10)
- 2.1.3.RELEASE适用于Thymeleaf 2.1(要求Thymeleaf版本高于或等于2.1.2)
许可
本软件按照Apache License 2.0提供许可。
要求(3.0.x)
- Thymeleaf版本高于或等于3.0.10
- Spring框架版本在3.0.x至5.1.x之间
- Spring Security版本在3.0.x至5.1.x之间
- 联网环境(Spring Security集成不能离线工作)。还需要Spring MVC和Spring WebFlux才能工作。
Maven信息
- groupId:
org.thymeleaf.extras - artifactId:
- Spring Security 5集成包:
thymeleaf-extras-springsecurity5 - Spring Security 6集成包:
thymeleaf-extras-springsecurity6
- Spring Security 5集成包:
分发包
分发包(二进制文件、源代码和文档)可以在bintray下载。
特性
模块提供名为org.thymeleaf.extras.springsecurity5.dialect.SpringSecurityDialect或org.thymeleaf.extras.springsecurity6.dialect.SpringSecurityDialect的新方言(具体是哪个方言取决于Spring Security版本),方言默认前缀是sec。这些方言包括:
- 新的表达式工具对象:
#authentication表示Spring Security认证对象(一个实现了org.springframework.security.core.Authentication接口的对象)#authorization:一个表达式工具对象,可以根据表达式、url和访问控制列表检查授权。
- 新属性:
sec:authentication="prop"输出authentication对象的prop属性值,这与JSP标签<sec:authentication />类似。sec:authorize="expr"或sec:authorize-expr="expr"根据用户能否通过expr表达式的授权验证,决定是否渲染该属性所在标签。(sec:authorize="expr"orsec:authorize-expr="expr"renders the element children (tag content) if the authenticated user is authorized to see it according to the specified Spring Security expression.)(译注:上句翻译不贴合本意,是译者根据自己的使用体验写的,下面两句翻译可能也不贴合本意)sec:authorize-url="url"根据用户能否访问特定URL决定是否渲染该属性所在标签。sec:authorize-acl="object :: permissions"根据Spring Source的访问控制列表系统和用户对特定领域对象是否有指定权限来决定是否渲染属性所在标签。
配置
为了在Spring MVC应用中使用thymeleaf-extras-springsecurity[5][6]模块(或者在Spring WebFlux应用中使用thymeleaf-extras-springsecurity6),对于使用Spring和Thymeleaf的应用首先需要使用通常的方式配置应用(TemplateEngine bean、模板解析器等等),然后将Spring Security方言添加到模板引擎中,这样就可以使用sec:*属性和专用表达式工具对象:
<bean id="templateEngine" class="org.thymeleaf.spring5.SpringTemplateEngine">
...
<property name="additionalDialects">
<set>
<!-- Note the package would change to 'springsecurity[5]' if you are using that version -->
<bean class="org.thymeleaf.extras.springsecurity6.dialect.SpringSecurityDialect"/>
</set>
</property>
...
</bean>
以上就是全部内容了!
注意:如果是在Spring Boot应用中使用Thymeleaf,只需要把相应的Thymeleaf和Spring Security的starter以及thymeleaf-extras-springsecurity[5|6]依赖添加到应用中,方言就自动配置好了。
使用表达式工具对象
#authentication对象使用起来很简单,就像下面这样:
<div th:text="${#authentication.name}">
The value of the "name" property of the authentication object should appear here.
</div>
#authorization也可以以同样的方式使用,通常用在th:if或th:unless标签中:
<div th:if="${#authorization.expression('hasRole(''ROLE_ADMIN'')')}">
This will only be displayed if authenticated user has role ROLE_ADMIN.
</div>
#authorization对象是org.thymeleaf.extras.springsecurity[5|6].auth.Authorization类的实例,参阅该类与它的文档来理解它的方法。
使用属性
使用sec:authentication属性基本等同于使用#authentication对象,但是仅能使用该对象的属性:
<div sec:authentication="name">
The value of the "name" property of the authentication object should appear here.
</div>
sec:authorize和sec:authorize-expr属性完全相同。它们和在th:if中使用#authorization.expression(...)效果相同:
<div sec:authorize="hasRole('ROLE_ADMIN')">
This will only be displayed if authenticated user has role ROLE_ADMIN.
</div>
这些sec:authorize属性中的Spring安全表达式实际上是在springsecurity特定的根对象上计算的Spring EL表达式,根对象包含hasRole(…)、getPrincipal()等方法。(These Spring Security Expressions in sec:authorize attributes are in fact Spring EL expressions evaluated on a SpringSecurity-specific root object containing methods such as hasRole(...), getPrincipal(), etc.)
与普通的Spring EL表达式一样,可以在Thymeleaf中访问一系列对象,这些对象包括上下文变量映射(#vars对象)。事实上,可以用${…}包围访问表达式,如果你觉得这样让你更舒服(译注:意思是不用${…}包围表达式也可以):
<div sec:authorize="${hasRole(#vars.expectedRole)}">
This will only be displayed if authenticated user has a role computed by the controller.
</div>
记住,Spring Security将一个特殊的安全导向的对象设置为表达式根,这就是不能在上述表达式中直接访问expctedRole变量的原因。
另一种检查授权的方式是sec:authorize-url,可以用这个属性检查用户能否访问特定URL:
<div sec:authorize-url="/admin">
This will only be displayed if authenticated user can call the "/admin" URL.
</div>
对于指定特定的HTTP方法,可以这样做:
<div sec:authorize-url="POST /admin">
This will only be displayed if authenticated user can call the "/admin" URL
using the POST HTTP method.
</div>
最后,有一个使用Spring Security的访问控制列表检查授权的属性,它需要一个域对象的规范和我们要求的在它上定义的权限。
<div sec:authorize-acl="${obj} :: '1,3'">
This will only be displayed if authenticated user has permissions "1" and "3"
on domain object referenced by context variable "obj".
</div>
在上面的属性中,域对象和权限规范都是thymeleaf标准表达式。
命名空间
所有版本方言都可用的命名空间是http://www.thymeleaf.org/extras/spring-security。
<html xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
错误的命名空间不会影响模板处理,它可能会影响在IDE中编辑模板时的建议和自动补全。
【翻译】Thymeleaf – Spring Security集成模块的更多相关文章
- 【翻译】Spring Security抛弃了WebSecurityConfigurerAdapter
原文链接:Spring Security without the WebSecurityConfigurerAdapter 作者:ELEFTHERIA STEIN-KOUSATHANA 发表日期:20 ...
- 【翻译】Spring Security - 如何解决WebSecurityConfigurerAdapter类已被弃用的问题?
原文链接:Spring Security - How to Fix WebSecurityConfigurerAdapter Deprecated 原文作者:Nam Ha Minh 原文发表日期:20 ...
- SpringBoot集成Spring Security(授权与认证)
⒈添加starter依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifact ...
- Spring Security 5.0.x 参考手册 【翻译自官方GIT-2018.06.12】
源码请移步至:https://github.com/aquariuspj/spring-security/tree/translator/docs/manual/src/docs/asciidoc 版 ...
- Spring boot +Spring Security + Thymeleaf 认证失败返回错误信息
[Please make sure to select the branch corresponding to the version of Thymeleaf you are using] Stat ...
- Spring Security(一):官网向导翻译
原文出自 https://spring.io/guides/topicals/spring-security-architecture Spring Security Architecture ...
- SpringBoot + Spring Security 学习笔记(一)自定义基本使用及个性化登录配置
官方文档参考,5.1.2 中文参考文档,4.1 中文参考文档,4.1 官方文档中文翻译与源码解读 SpringSecurity 核心功能: 认证(你是谁) 授权(你能干什么) 攻击防护(防止伪造身份) ...
- 从源码看Spring Security之采坑笔记(Spring Boot篇)
一:唠嗑 鼓捣了两天的Spring Security,踩了不少坑.如果你在学Spring Security,恰好又是使用的Spring Boot,那么给我点个赞吧!这篇博客将会让你了解Spring S ...
- Spring Security OAuth2 开发指南
官方原文:http://projects.spring.io/spring-security-oauth/docs/oauth2.html 翻译及修改补充:Alex Liao. 转载请注明来源:htt ...
随机推荐
- .Net下的Http请求调用(Post与Get)
http请求调用是开发中经常会用到的功能.在内,调用自有项目的Web Api等形式接口时会用到:在外,调用一些第三方功能接口时,也会用到,因为,这些第三方功能往往是通过http地址的形式提供的,比如: ...
- python3实现:进程遇Error定时重启
import os import time # 停止HFish def stopHFish(): # while True: try: # 找到HFish进程号 HFish_id = int(os.p ...
- ProxySQL 配置ProxySQL
转载自:https://www.jianshu.com/p/212397a1be67 假定你已经对ProxySQL的架构有所了解.本文对ProxySQL的所有配置都是使用Admin管理接口完成的,该管 ...
- 2.第一篇 k8s组件版本及功能简介
文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247483772&idx=1&sn=a693d8a9 ...
- 在k8s中部署前后端分离项目进行访问的两种配置方式
第一种方式 (1) nginx配置中只写前端项目的/根路径配置 前端项目使用的Dockerfile文件内容 把前端项目编译后生成的dist文件夹放在nginx的html默认目录下,浏览器访问前端项目时 ...
- Readsh中文版初始设置
B站视频教程网址:https://space.bilibili.com/630285695/video 安装成功后,打开浏览器输入http://ip:5000如果出现如下画面,即告安装成功. 初始设置 ...
- 在 Linux 中找出内存消耗最大的进程
1 使用 ps 命令在 Linux 中查找内存消耗最大的进程 ps 命令用于报告当前进程的快照.ps 命令的意思是"进程状态".这是一个标准的 Linux 应用程序,用于查找有关在 ...
- 监控平台SkyWalking9入门实践
简便快速的完成对分布式系统的监控: 一.业务背景 微服务作为当前系统架构的主流选型,虽然可以应对复杂的业务场景,但是随着业务扩展,微服务架构本身的复杂度也会膨胀,对于一些核心的业务流程,其请求链路会涉 ...
- 云原生虚拟网络 tun/tap & veth-pair
云原生虚拟网络 tun/tap & veth-pair 转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/684 ...
- 分布式存储系统之Ceph集群部署
前文我们了解了Ceph的基础架构和相关组件的介绍,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16720234.html:今天我们来部署一个ceph集群: 部 ...