Весенняя безопасность с Thymeleaf

Весенняя безопасность с Thymeleaf

1. обзор

In this quick tutorial, we’ll focus on Spring Security with Thymeleaf. Мы собираемся создать приложение Spring Boot, в котором мы продемонстрируем использование диалекта безопасности.

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

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

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

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

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


    org.thymeleaf.extras
    thymeleaf-extras-springsecurity4

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

3. Конфигурация Spring Security

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

У наших пользователей разные роли:ADMIN иUSER соответственно, поэтому мы можем представлять им определенный контент в зависимости от роли.

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

The Spring Security dialect allows us to conditionally display content based on user roles, permissions or other security expressions. Он также дает нам доступ к объекту SpringAuthentication.

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



    
        Welcome to Spring Security Thymeleaf tutorial
    
    
        

Welcome

Spring Security Thymeleaf tutorial

Text visible to user.
Text visible to admin.
Text visible only to authenticated users.
Authenticated username:
Authenticated user roles:

Мы можем видеть атрибуты, характерные для Spring Security Dialect:sec:authorize иsec:authentication.

Давайте обсудим их по порядку.

4.1. Пониманиеsec:authorize

Проще говоря, мы используем атрибутsec:authorize для управления отображаемым контентом.

Например, если мы хотим показывать контент только пользователю с ролью ПОЛЬЗОВАТЕЛЬ, мы можем сделать:<div sec:authorize=”hasRole(‘USER')”>.

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

.

4.2. Пониманиеsec:authentication

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

Дляaccess an authentication object withing Thymeleaf мы можем просто использовать<div sec:authentication=”name”> или<div sec:authentication=”principal.authorities”>.

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

5. Резюме

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

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