Thymeleaf中使用Spring Security

2023/05/17

1. 概述

在本快速教程中,我们重点介绍使用Thymeleaf与Spring Security。我们创建一个Spring Boot应用程序,在其中演示Security方言的用法。

我们选择的前端技术是Thymeleaf,它是一个现代的服务器端Web模板引擎,与Spring MVC框架具有良好的集成。

最后,Spring Security Dialect是一个Thymeleaf附加模块,它有助于将这两者集成在一起。

2. 依赖

首先,我们将新的依赖添加到我们的Maven pom.xml中:

<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>

3. Spring Security配置

接下来,让我们定义Spring Security的配置,我们还需要至少两个不同的用户来演示安全方言的用法:


@Configuration
@EnableWebSecurity
public class SecurityConfiguration {

    // [...] 
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("user").password(passwordEncoder().encode("password")).roles("USER")
                .and()
                .withUser("admin").password(passwordEncoder().encode("admin")).roles("ADMIN");
    }

    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

如我们所见,在configureGlobal(AuthenticationManagerBuilder auth)中,我们定义了两个用户名和密码,我们可以使用这些凭证来访问我们的应用程序。

这两个用户有不同的角色:分别是ADMIN和USER,因此我们可以根据角色向他们呈现特定的内容。

4. 安全方言

Spring Security方言允许我们根据用户角色、权限或其他安全表达式有条件地显示内容。它还允许我们能够访问 Spring Authentication对象。

让我们看一下index页面,其中包含安全方言的示例:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
    <head>
        <title>Welcome to Spring Security Thymeleaf tutorial</title>
    </head>
    <body>
        <h2>Welcome</h2>
        <p>Spring Security Thymeleaf tutorial</p>
        <div sec:authorize="hasRole('USER')">Text visible to user.</div>
        <div sec:authorize="hasRole('ADMIN')">Text visible to admin.</div>
        <div sec:authorize="isAuthenticated()">
            Text visible only to authenticated users.
        </div>
        Authenticated username:
        <div sec:authentication="name"></div>
        Authenticated user roles:
        <div sec:authentication="principal.authorities"></div>
    </body>
</html>

我们可以看到特定于Spring Security Dialect的属性:sec:authorize和sec:authentication。

4.1 sec:authorize

简单地说,我们使用sec:authorize属性来控制显示的内容

例如,如果我们只想向角色为USER的用户显示内容,我们可以执行以下操作:

<div sec:authorize="hasRole('USER')">

并且,如果我们想授权对所有经过身份验证的用户的访问,我们可以使用以下表达式:

<div sec:authorize="isAuthenticated()">

4.2 sec:authentication

Spring Security Authentication接口公开了有关经过身份验证的主体或身份验证请求的有用方法。

要使用Thymeleaf访问Authentication对象,我们可以简单地使用<div sec:authentication=”name”>或<div sec:authentication=”principal.authorities”>,前者使我们可以访问经过身份验证的用户的名称,后者使我们可以访问经过身份验证的用户的角色。

5. 总结

在本文中,我们在一个简单的Spring Boot应用程序中介绍了Thymeleaf中的Spring Security支持。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章