Spring security — это отличная среда, которая экономит много времени и усилий разработчиков. Также это достаточно гибко, чтобы настроить и свести его к вашим потребностям. По мере развития Spring безопасность Spring также требует упрощения и начальной загрузки для настройки безопасности в вашем проекте.
Spring Boot 2.0 уже существует, и мы воспользуемся этим для наших проектов в области безопасности. В этом проекте мы стремимся создать максимально простой проект с защитой. Для начала создадим простой проект весенней загрузки 2.0.
Мы можем использовать приложение Spring SPRING INITIALIZR .
Конечный результат проекта будет иметь проект с загрузочной пружиной 2 с Gradle.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
buildscript { ext { springBootVersion = '2.0.1.RELEASE' } repositories { mavenCentral() } dependencies { classpath( "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}" ) } } apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' group = 'com.gkatzioura.security' version = '0.0.1-SNAPSHOT' sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { compile( 'org.springframework.boot:spring-boot-starter-security' ) compile( 'org.springframework.boot:spring-boot-starter-web' ) testCompile( 'org.springframework.boot:spring-boot-starter-test' ) testCompile( 'org.springframework.security:spring-security-test' ) } |
Теперь учтите, что с Spring Boot 2 есть два стека. Либо стек сервлетов, либо реактивный стек WebFlux. В этом уроке мы будем использовать стек сервлетов. Мы расскажем о WebFlux в другом уроке.
Давайте пойдем и добавим наш первый контроллер.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
package com.gkatzioura.security.simple.controller; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloWorldController { @GetMapping ( "/hello" ) public ResponseEntity<String> hello(String name) { return new ResponseEntity<>( "Hello " +name, HttpStatus.OK); } } |
Если мы попытаемся получить доступ к конечной точке http: // localhost: 8080 / hello? Name = john, мы увидим экран входа в систему. Таким образом, включение зависимости безопасности в наш проект автоматически защищает наши конечные точки и настраивает пользователя с помощью пароля. Для того, чтобы восстановить пароль, вы можете проверить на экране входа в систему. Имя пользователя будет ‘user’, а пароль будет тем, который будет сгенерирован автоматически.
Конечно, использование автоматически сгенерированного пароля недостаточно, поэтому мы собираемся предоставить имя пользователя и пароль по нашему выбору.
Один из способов установить ваше имя пользователя и пароль в файле application.yaml
1
2
3
4
5
|
spring: security: user: name: test-user password: test-password |
Теперь помещать ваши пароли в файловую систему, особенно когда они не зашифрованы, не очень хорошая практика, не говоря уже о том, чтобы загружать их в систему управления версиями, поскольку application.yaml является исходным файлом. Также любой, кто имеет доступ к двоичному файлу, может восстановить имя пользователя и пароль.
Поэтому вместо помещения этой конфиденциальной информации в файл application.yaml вы можете установить их, используя переменные среды.
Так что ваши переменные среды будут
1
2
|
SPRING_SECURITY_USER_NAME= test -user SPRING_SECURITY_USER_PASSWORD= test -password |
Подводя итог, это был самый простой и быстрый способ повысить безопасность вашего проекта. В следующем блоге мы сделаем то же самое, но с использованием реактивного стека WebFlux.
Опубликовано на Java Code Geeks с разрешения Эммануила Гкациоураса, партнера нашей программы JCG. См. Оригинальную статью здесь: Spring Security с Spring Boot 2.0: простая аутентификация с использованием стека сервлетов
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |