Spring Security

Сигурността е съществен аспект от дизайна на софтуерното приложение. Той защитава софтуера от неоторизиран достъп и злоупотреба.

Има два основни термина, които трябва да се разбират, когато говорим за сигурност. Удостоверяването (authentication) се отнася до проверка на идентификационните данни на потребителя. Упълномощаването (authorization) се отнася до проверка на способността на потребителя да извършва определена дейност.

Spring Framework предоставя специален модул, наречен Spring Security, който се фокусира върху аспектите на сигурността на Spring приложенията. Spring Boot осигурява лесна интеграция със Spring Security с помощта на зависимостта spring-boot-starter-security. Някои от функциите за сигурност по подразбиране, предлагани от Spring Security в приложение за Spring Boot, са както следва:

· Spring Security налага потребителите на приложението да бъдат удостоверени преди достъп до него.

· Ако приложението няма страница за вход, Spring Security генерира страница за вход по подразбиране за потребителско влизане и позволява на потребителя да излезе от приложението.

· Spring Security осигурява потребител по подразбиране с име user и генерира парола по подразбиране (отпечатана в регистрационния файл на конзолата) за базирано на форма влизане.

· Spring Security предоставя няколко енкодера на пароли за кодиране на паролата и съхраняването й в хранилището.

· Spring Security предотвратява атаки за фиксиране на сесия чрез промяна на ID на сесията след успешно удостоверяване на потребителя.

· Spring Security осигурява защита по подразбиране от атаки за фалшифициране на заявки между сайтове (CSRF). Това става чрез включване на произволно генериран токен в HTTP отговора. Той очаква този токен да бъде наличен във всички последващи заявки, базирани на форма, които възнамеряват да извършат операция за промяна на състоянието в приложението. Злонамерен потребител няма да има достъп до токена и следователно не може да извършва CSRF атаки.

Добавяне на Spring Security в Spring Boot приложение

За да започнете, е необходимо да добавите следната зависимост към вашето Spring Boot приложение:

	  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

Това е всичко, което трябва да направите, за да добавите базова защита към вашето приложение. Когато стартирате приложението, можете да видите следния запис:

Using generated security password: b5dd65a5-b0e7-49d0-8f2b-eaa55abf0487

Тази генерирана парола е само за разработка. Трябва да актуализирате своята конфигурация за сигурност, преди да стартирате приложението в производствена среда. Ако отворите приложението си на http://localhost:8080, браузърът ще отиде до страница за вход по подразбиране.

Нека въведем идентификационните данни за достъп до приложението. Потребителят по подразбиране е user, а паролата се генерира автоматично и можете да я намерите в логовете, както беше споменато. Ролята по подразбиране е USER, това означава, че ако не се укаже конкретна роля за потребителя, той ще бъде асоцииран с ролята USER, която е предвидена за обикновени потребители с базови права за достъп. Можете да промените потребителските идентификационни данни по подразбиране в application.properties, както следва:

spring.security.user.name=admin
spring.security.user.password=secret
spring.security.user.roles=ADMIN

Това решение е подходящо за бърза демонстрация. Може да искате да внедрите по-сложна и зряла система за сигурност като функция за регистрация, при която потребителите могат да се регистрират преди достъп до приложението и достъп до ресурси, където потребителят има необходимите разрешения. Може също да искате да въведете роли като ADMIN, USER и други.