Перейти к основному содержимому

Spring Security с Thymeleaf

· 3 мин. чтения

1. Обзор

В этом кратком руководстве мы сосредоточимся на Spring Security с Thymeleaf. Мы собираемся создать приложение Spring Boot, в котором продемонстрируем использование диалекта безопасности.

В качестве технологии внешнего интерфейса мы выбрали Thymeleaf — современный механизм веб-шаблонов на стороне сервера с хорошей интеграцией с инфраструктурой Spring MVC. Для получения более подробной информации, пожалуйста, посмотрите нашу вступительную статью об этом.

Наконец, Spring Security Dialect — это дополнительный модуль Thymeleaf, который, естественно, помогает интегрировать их вместе.

Мы собираемся использовать простой проект, который мы создали в нашей учебной статье по Spring Boot ; у нас также есть учебник Thymeleaf с Spring , где можно найти стандартную конфигурацию Thymeleaf.

2. Зависимости

Прежде всего, давайте добавим новую зависимость в наш Maven pom.xml :

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

Рекомендуется всегда использовать последнюю версию, которую мы можем получить на Maven Central .

3. Конфигурация безопасности Spring

Далее давайте определим конфигурацию для Spring Security.

Нам также нужны как минимум два разных пользователя, чтобы продемонстрировать использование диалекта безопасности:

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

// [...]
@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) мы определяем двух пользователей с именем пользователя и паролем. Мы можем использовать их для доступа к нашему приложению.

Наши пользователи имеют разные роли: АДМИНИСТР и ПОЛЬЗОВАТЕЛЬ соответственно, поэтому мы можем предоставлять им определенный контент в зависимости от роли.

4. Диалект безопасности

Диалект Spring Security позволяет нам условно отображать контент на основе ролей пользователей, разрешений или других выражений безопасности. Это также дает нам доступ к объекту Spring Authentication .

Давайте посмотрим на индексную страницу, которая содержит примеры диалекта безопасности:

<!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 для управления отображаемым контентом.

Например, если мы хотим показывать контент только пользователю с ролью USER, мы можем сделать: <div sec:authorize=”hasRole('USER')”>.

И, если мы хотим расширить доступ для всех аутентифицированных пользователей, мы можем использовать следующее выражение:

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

4.2. Понимание сек:аутентификация

Интерфейс Spring Security Authentication предоставляет полезные методы, касающиеся аутентифицированного принципала или запроса аутентификации.

Чтобы получить доступ к объекту аутентификации с помощью Thymeleaf , мы можем просто использовать <div sec:authentication="name"> или <div sec:authentication="principal.authorities">.

Первый дает нам доступ к имени аутентифицированного пользователя, а второй позволяет нам получить доступ к ролям аутентифицированного пользователя.

5. Резюме

В этой статье мы использовали поддержку Spring Security в Thymeleaf в простом приложении Spring Boot.

Как всегда, рабочая версия кода, показанного в этой статье, доступна в нашем репозитории GitHub .