【翻译】Thymeleaf – Spring Security集成模块

来源: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

分发包

模块提供名为 org.thymeleaf.extras.springsecurity5.dialect.SpringSecurityDialectorg.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:authentication>类似。
  • sec:authorize="expr"sec:authorize-expr="expr"根据用户能否通过expr表达式的授权验证,决定是否渲染该属性所在标签。( sec:authorize="expr" or sec: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:*属性和专用表达式工具对象:

以上就是全部内容了!

注意:如果是在Spring Boot应用中使用Thymeleaf,只需要把相应的Thymeleaf和Spring Security的starter以及 thymeleaf-extras-springsecurity[5|6]依赖添加到应用中,方言就自动配置好了。

使用表达式工具对象

#authentication对象使用起来很简单,就像下面这样:

#authorization也可以以同样的方式使用,通常用在 th:ifth:unless标签中:

#authorization对象是 org.thymeleaf.extras.springsecurity[5|6].auth.Authorization类的实例,参阅该类与它的文档来理解它的方法。

使用属性

使用 sec:authentication属性基本等同于使用 #authentication对象,但是仅能使用该对象的属性:

sec:authorizesec:authorize-expr属性完全相同。它们和在 th:if中使用 #authorization.expression(...)效果相同:

这些 sec:authorize属性中的Spring安全表达式实际上是在springsecurity特定的根对象上计算的Spring EL表达式,根对象包含 hasRole(&#x2026;)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对象)。事实上,可以用 ${&#x2026;}包围访问表达式,如果你觉得这样让你更舒服(译注:意思是不用 ${&#x2026;}包围表达式也可以):

记住,Spring Security将一个特殊的安全导向的对象设置为表达式根,这就是不能在上述表达式中直接访问 expctedRole变量的原因。

另一种检查授权的方式是 sec:authorize-url,可以用这个属性检查用户能否访问特定URL:

对于指定特定的HTTP方法,可以这样做:

最后,有一个使用Spring Security的访问控制列表检查授权的属性,它需要一个域对象的规范和我们要求的在它上定义的权限。

在上面的属性中,域对象和权限规范都是thymeleaf标准表达式。

命名空间

所有版本方言都可用的命名空间是 http://www.thymeleaf.org/extras/spring-security

错误的命名空间不会影响模板处理,它可能会影响在IDE中编辑模板时的建议和自动补全。

Original: https://www.cnblogs.com/cnblog-user/p/16463599.html
Author: Halloworlds
Title: 【翻译】Thymeleaf – Spring Security集成模块

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/574886/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 技术管理杂谈

    人非机器。 我们可以编写一段程序,让机器严格按照我们的预期运行,程序写得好的机器够牛逼的话,能保它跑个几十年无需干预。 但是人不行。 人有别于机器在于他的感性以及模糊的理性。 人会…

    Java 2023年5月30日
    060
  • 西门子PLC数据读取 Observer设计模式

    当我听到这个需求的时候,我差点爆粗口(实际上可能已经爆了,不过我忘了)。 需求刚开始是: C#连接PLC Modbus读取值。 我用C#写完了,觉得太简单了,还弄了个窗体。 接着是…

    Java 2023年6月9日
    071
  • 实用向—总结一些唯一ID生成方式

    Redis Incr 命令会将 key 中储存的数字值增一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。 这里以jedis为例提供两种…

    Java 2023年6月9日
    077
  • github打不开怎么办

    打开以下三个网址,分别取各个网址如下图所示位置的IP地址 github网址查询: github域名查询: 修改hosts文件,路径为c:\windows\system32\driv…

    Java 2023年6月5日
    072
  • mongodb oplog日志详解和格式分析

    基本概念 oplog使用固定大小集合记录了数据库中所有修改操作的操作日志(新增、修改和删除,无查询),其记录每条记录被修改后的数据,等同于MYSQL中ROW类型的binlog。mo…

    Java 2023年6月6日
    070
  • Lua:Nginx Lua环境配置,第一个Nginx Lua代码

    一、编译安装LuaJIT Lua:编译安装LuaJIT,第一个Lua程序 http://blog.csdn.net/guowenyan001/article/details/482…

    Java 2023年5月30日
    064
  • CentOS7系统配置国内yum源和epel源

    1.备份原文件 首先进入 /etc/yum.repos.d/目录下,新建一个repo_bak目录,用于保存系统中原来的repo文件 2.在CentOS中配置使用网易和阿里的开源镜像…

    Java 2023年6月13日
    076
  • web上线部署系统 Walle

    Walle瓦力是基于git和rsync实现的一个web部署系统工具。 用户分身份注册、登录 开发者发起上线任务申请 管理者审核上线任务 支持多项目部署 快速回滚 部署前准备任务(前…

    Java 2023年6月8日
    073
  • 从源码里的一个注释,我追溯到了12年前,有点意思。

    你好呀,我是歪歪。 那天我正在用键盘疯狂的输出: 突然微信弹出一个消息,是一个读者发给我的。 我点开一看: 啊,这熟悉的味道,一看就是 HashMap,八股文梦开始的地方啊。 但是…

    Java 2023年6月5日
    072
  • java gui 下拉框中项删除按钮

    http://www.cnblogs.com/kangls/archive/2013/03/21/2972943.html http://m.blog.csdn.net/blog/…

    Java 2023年5月29日
    072
  • 2022-8-18 第六组 JDBC

    JDBC 1. 概念:Java DataBase Connectivity Java 数据库连接, Java语言操作数据库 JDBC本质:其实是官方(sun公司)定义的一套操作所有…

    Java 2023年6月13日
    044
  • Java的反射

    在我们平时的开发中,我们肯定会遇到过spring框架。框架中我们几乎不需要手动去new对象。只需要通过一些简单的配置,spring就会把对象为我们创建好。这里就用到反射。下面我们详…

    Java 2023年6月7日
    047
  • TypeScript(6)函数

    函数 函数是 JavaScript 应用程序的基础,它帮助你实现抽象层,模拟类,信息隐藏和模块。在 TypeScript 里,虽然已经支持类,命名空间和模块,但函数仍然是主要的定义…

    Java 2023年6月9日
    075
  • 今天发布的一个程序一直提示Microsoft.mshtml的强名称验证失败

    软件发布后,在客户的电脑上一再提示缺失该文件或强名称验证失败, 本机的Microsoft.mshtml就两个文件, 拷到客户的机子上,均出同样提示。 后在网络上找个这个dll,该版…

    Java 2023年6月14日
    0105
  • [spring]spring管理的入门项目快速搭建

    1.spring简介 Spring框架是一个开源的应用程序框架,是针对bean的生命周期进行管理的轻量级容器。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了…

    Java 2023年6月6日
    077
  • 如何查看和结束占用的端口

    很多时候,我们启动idea的服务都会出现端口给占用的情况,导致项目跑不起等情况! 或者是SQL服务器’80’给占用。 方法: 查看占用端口: 开始&#821…

    Java 2023年6月9日
    069
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球