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 .