9.5.2 使用 Thymeleaf 的 Spring Security 方言
与 Spring Security 的 JSP 标签库类似,Thymeleaf 的安全方言提供了条件化渲染和显示认证细节的能力。表 9.8 列出了安全方言所提供的属性。
属性 | 作用 |
sec:authentication | 渲染认证对象的属性。类似于Spring Security 的 <sec:authentication/> JSP 标签 |
sec:authorize | 基于表达式的计算结果,条件性的渲染内容。类似于 Spring Security 的 <sec:authorize> JSP 标签 |
sec:authorize-acl | 基于表达式的计算结果,条件性的渲染内容。类似于 Spring Security 的 <sec:accesscontrollist/> JSP标签 |
sec:authorize-expr | sec:authorize 属性的别名 |
sec:authorize-url | 基于给定 URL 路径相关的安全规则,条件性的渲染内容。类 似于 Spring Security 的 <sec:authorize> JSP 标签使用 url 属性时的场景 |
为了使用安全方言,我们需要确保 Thymeleaf Extras Spring Security 已经位于应用的类路径下。然后,还需要在配置中使用 SpringTemplateEngine 来注册SpringSecurityDialect。程序清单 9.10 所展现的 @Bean 方法声明了 SpringTemplateEngine bean,其中就包含了 SpringSecurityDialect。
安全方言注册完成之后,我们就可以在 Thymeleaf 模板中使用它的属性了。首先,需要在使用这些属性的模板中声明安全命名空间:
在这里,标准的 Thymeleaf 方法依旧与之前一样,使用 th 前缀,安全方言则设置为使用 sec 前缀。
这样我们就能在任意合适的地方使用 Thymeleaf 属性了。比如,假设我们想要为认证用户渲染 “Hello” 文本。如下的 Thymeleaf 模板代码片段就能完成这项任务:
sec:authorize 属性会接受一个 SpEL 表达式。如果表达式的计算结果为 true,那么元素的主体内容就会渲染。在本例中,表达式为 isAuthenticated(),所以只有用户已经进行了认证,才会渲染标签的主体内容。就这个标签的主体内容部分而言,它的功能是使用认证对象的 name 属性提示 “Hello” 文本。
你可能还记得,在 Spring Security 中,借助 <sec:authorize>
JSP 标签的 url 属性能够基于给定 URL 的权限有条件地渲染内容。在 Thymeleaf 中,我们可以通过 sec:authorize-url 属性完成相同的功能。例如,如下 Thymeleaf 代码片段所实现的功能与之前 <sec:authorize>
JSP 标签和 url 属性所实现的功能是相同的:
如果用户有权限访问 “/admin” 的话,那么到管理页面的链接就会渲染,否则的话,这个链接将不会渲染。
Last updated