Spring Security--在Thymeleaf中取值

    Thymeleaf 中 Spring Security 的使用

    Spring Security 可以在一些视图技术中进行控制显示效果。例如:
JSP 或 Thymeleaf。在非前后端分离且使用 Spring Boot 的项目中多使用 Thymeleaf 作为视图展示技术。Thymeleaf对Spring Security 的支持都放在 thymeleaf-extras-springsecurityX 中,目前最新版本为 5。
      所以需要在项目中添加此 jar 包的依赖和 thymeleaf 的依赖。

<dependency> 
	<groupId>org.thymeleaf.extrasgroupId> 
	<artifactId>thymeleaf-extras-springsecurity5artifactId> 
dependency> 
<dependency> 
	<groupId>org.springframework.bootgroupId> 
	<artifactId>spring-boot-starter-thymeleafartifactId> 
dependency> 

      在 html 页面中引入 thymeleaf 命名空间和 security 命名空间

<html xmlns="http://www.w3.org/1999/xhtml" 
xmlns:th="http://www.thymeleaf.org" 
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5">

    1 authentication 获取属性

      可以在 html 页面中通过sec:authentication="" 获取 UsernamePasswordAuthenticationToken 中所有 getXXX 的内容,包含父类中的 getXXX 的内容.
根据源码得出下面属性:

  • name:登录账号名称

  • principal:登录主体,在自定义登录逻辑中是UserDetails

  • credentials:凭证

  • authorities:权限和角色

  • details:实际上是 WebAuthenticationDetails 的实例。可以获取remoteAddress(客户端 ip)和sessionId(当前 sessionId)

      1.1实现步骤:

        1.1.1 新建 demo.html

      在项目resources 中新建 templates 文件夹,在 templates 中新建demo.html 页面
Spring Security--在Thymeleaf中取值_第1张图片

        1.1.2 编写demo.html页面
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:th="http://www.thymeleaf.org"
      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
head>
<body>
    登录账号:<span sec:authentication="name">span><br/>
    登录账号:<span sec:authentication="principal.username">span><br/>
    凭证:<span sec:authentication="credentials">span><br/>
    权限和角色:<span sec:authentication="authorities">span><br/>
    客户端地址:<span sec:authentication="details.remoteAddress">span><br/>
    sessionId:<span sec:authentication="details.sessionId">span><br/>
body>
html>

Spring Security--在Thymeleaf中取值_第2张图片

     2 authorize权限判断

      在 html 页面中可以使用 sec:authorize=”表达式”进行权限控制,判断是否显示某些内容。表达式的内容和 access(表达式)的用法相同。
      如果用户具有指定的权限,则显示对应的内容;如果表达式不成立, 则不显示对应的元素。

          2.1 修改demo.html

   拥有的权限
在这里插入图片描述

  通过权限判断:
   <button sec:authorize="hasAuthority('/insert')">新增button>
   <button sec:authorize="hasAuthority('/delete')">删除button>
   <button sec:authorize="hasAuthority('/update')">修改button>
   <button sec:authorize="hasAuthority('/select')">查看button> <br/>
  通过角色判断:
   <button sec:authorize="hasRole('admin')">新增button>
   <button sec:authorize="hasRole('abc')">删除button>
   <button sec:authorize="hasRole('normal')">修改button>
   <button sec:authorize="hasRole('abc')">查看button>

在这里插入图片描述

你可能感兴趣的:(Java,SpringSecurity)