Статьи

Простое веб-приложение с Spring Boot, Spring Security и Stormpath — за 15 минут

Управление идентификацией здания, включая аутентификацию и авторизацию? Попробуйте Stormpath! Наш REST API и надежная поддержка Java SDK могут устранить риск для безопасности и могут быть реализованы за считанные минуты. Зарегистрируйтесь и никогда больше не создавайте аутентификацию!

ОБНОВЛЕНИЕ : Мы недавно выпустили пересмотр нашей интеграции Stormpath Spring Security. Вам больше не нужно наследовать от специального адаптера конфигуратора безопасности Stormpath. Вместо этого вы применяете Stormpath DSL (предметно-ориентированный язык). Посмотрите ниже, чтобы увидеть, как это легко.

Здесь, в Stormpath, мы ♥ Весенний ботинок. Это позволяет легко и весело создавать богатые веб-приложения на Java.

Мы очень рады нашему последнему выпуску Java SDK, который включает капитальный ремонт нашей поддержки Spring Security и Spring Boot.

Если вы раньше создавали веб-приложение, вы знаете, что все «пользовательские вещи» — это королевская боль. Stormpath предоставляет разработчикам все эти «пользовательские штучки» из коробки, чтобы вы могли получить то, что действительно волнует вас — ваше приложение! К тому времени, как вы закончите с этим учебником (я обещаю, <15 минут), у вас будет полностью работающее веб-приложение Spring Boot, которое защищает доступ пользователей к ограниченным путям с помощью Spring Security и поддерживается Stormpath.

Мы сконцентрируемся на интеграции с Spring Boot, чтобы развернуть простое веб-приложение Spring Boot с полной системой регистрации пользователей и входа в систему со следующими функциями:

  • Страницы входа и регистрации
  • Рабочие процессы сброса пароля
  • Ограничение доступа в соответствии с членством в группе
  • Возможность легко включить другие функции Stormpath в нашей библиотеке Java (аутентификация API, SSO, социальный вход и т. Д.)

В этой демонстрации мы будем использовать stormpath-default-spring-boot-starter . Его модульная конструкция поддерживает Spring Boot 1.3.0 и Spring Security 4.0.3, а также Spring Boot WebMVC и шаблонизатор Thymeleaf. Я буду использовать мой Mac, приложение Terminal и IntelliJ IDE.

Весь код для этого урока можно найти здесь .

В этом посте вы можете увидеть пример кода в действии, нажав на кнопку Deploy to Heroku. Все, что вам нужно сделать, это зарегистрироваться для бесплатной учетной записи Heroku .

Что такое Стормпат?

Stormpath — это сервис API, который позволяет разработчикам создавать, редактировать и безопасно хранить
учетные записи пользователей и данные учетных записей пользователей, а также связать их с одним или несколькими приложениями. Наш API позволяет вам:

  • Аутентификация и авторизация ваших пользователей
  • Храните данные о ваших пользователях
  • Выполнить пароль и логин на основе социальных сетей
  • Отправить сообщения для сброса пароля
  • Выпуск ключей API для веб-приложений на основе API
  • И многое другое! Ознакомьтесь с нашей документацией по продукту

Вкратце: мы делаем управление учетными записями пользователей намного проще, безопаснее и более
масштабируемо, чем то, к чему вы, вероятно, привыкли.

Готовы начать? Зарегистрируйте бесплатный аккаунт разработчика здесь .

Начните свой весенний проект загрузки

У вас есть аккаунт разработчика Stormpath? Большой! Давайте начнем…

Независимо от того, являетесь ли вы Maven Maven или Gradle grete , получить настройки вашего проекта совсем несложно.

Вот файл pom.xml для начала:

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
33
34
35
36
  
    <modelVersion>4.0.0</modelVersion>
  
    <groupId>com.stormpath.sample</groupId>
    <artifactId>stormpath-spring-boot-spring-security-tutorial</artifactId>
    <version>0.1.0</version>
    <name>Spring Boot Spring Security Stormpath Tutorial</name>
    <description>A simple Spring Boot Web MVC application with Spring Security and out-of-the-box login and self-service screens!</description>
  
    <dependencies>
        <dependency>
            <groupId>com.stormpath.spring</groupId>
            <artifactId>stormpath-default-spring-boot-starter</artifactId>
            <version>1.0.RC6</version>
        </dependency>
    </dependencies>
  
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.3.0.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
  
</project>

И вот для build.gradle файл build.gradle :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.0.RELEASE")
    }
}
  
apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'spring-boot'
  
group = 'com.stormpath'
version = '0.1.0'
  
repositories {
    mavenCentral()
}
  
dependencies {
    compile group: 'com.stormpath.spring', name: 'stormpath-default-spring-boot-starter', version:'1.0.RC6'
}

Вы можете заметить, что для Maven и Gradle существует одна зависимость: stormpath-default-spring-boot-starter . Ага. Вот и все. Как вы увидите ниже, эта зависимость дает вам всю магию Spring Boot, Spring Security и Stormpath одновременно.

Соберите свои учетные данные API и Href приложения

Соединение между вашим приложением и Stormpath обеспечивается «парой ключей API». Вы предоставите эти ключи
к вашему веб-приложению, и оно будет использовать их при общении с Stormpath. Вы можете скачать пару ключей API с нашей консоли администратора . После входа в систему вы можете загрузить пару ключей API с домашней страницы, она загрузит файл apiKey.properties — мы воспользуемся этим в ближайшее время.

Пока вы находитесь в консоли администратора, вы хотите получить href для вашего приложения Stormpath по умолчанию. В Stormpath объект Application используется для связи вашего веб-приложения с вашими пользовательскими магазинами внутри Stormpath. Все новые учетные записи разработчиков имеют приложение под названием «Мое приложение». Нажмите «Приложения» в консоли администратора, затем нажмите «Мое приложение». На этой странице вы увидите Href для приложения. Скопируйте это — нам понадобится позже.

Написание Spring Boot Application

Код для этого раздела можно найти в теге LockedDown репозитория .

кнопка

Нам нужны три небольших Java-класса и HTML-шаблон для запуска первой версии нашего веб-приложения. Они достаточно малы, чтобы я поместил их прямо здесь. Давайте доберемся до этого!

Точка входа в приложение Spring Boot

Все приложения Spring Boot имеют точку входа, которая работает так же, как обычная Java-программа. У него есть main метод и все.

Вот Application.java :

1
2
3
4
5
6
@SpringBootApplication
public class Application  {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

@SpringBootApplication строк кода, включая аннотацию @SpringBootApplication возможности.

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

По умолчанию (и в соответствии с лучшими практиками безопасности) Spring Security блокирует все ваше приложение. Это запирает это до такой степени, что это даже не доступно! Хотя это соответствует лучшим практикам безопасности, это не очень полезно. Кроме того, нам нужно соединить Spring Security и Stormpath вместе. Это подводит нас к нашему SpringSecurityWebAppConfig.java :

1
2
3
4
5
6
7
@Configuration
public class SpringSecurityWebAppConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.apply(stormpath());
    }
}

Аннотация @Configuration заставляет Spring Boot создать экземпляр этого класса как конфигурации. .apply(stormpath()) все достоинства Stormpath (рабочие процессы аутентификации и авторизации) к Spring Security.

Поскольку в методе configure больше нет конфигурации, мы все равно увидим поведение по умолчанию, когда все заблокировано. Однако вместо стандартных потоков аутентификации Spring Security мы увидим стандартные потоки Stormpath. То есть попытка перейти к любому пути в приложении приведет к перенаправлению на страницу login в Stormpath.

Итак, вызов метода в 1 строку, и мы получили безопасность!

Spring WebMVC связывает все вместе

Наша конфигурация безопасности выше гарантирует, что все пути в приложении будут защищены.

Контроллер определяет, как запрашиваемые пути направляются для отображения, какие шаблоны.

Вот наш HelloController.java :

1
2
3
4
5
6
7
@Controller
public class HelloController {
    @RequestMapping("/")
    String home() {
        return "home";
    }
}

Аннотация @Controller сообщает Spring Boot, что это контроллер. У нас есть один путь, определенный в строке 3, / . Строка 5 возвращает шаблон Thymeleaf с именем home .

7 строк кода, и у нас есть маршрутизация Model-View-Controller (MVC).

Приведи нас home.html

По умолчанию шаблонизатор Thymeleaf будет искать шаблоны, возвращаемые контроллерами, в папке с названием templates в вашем classpath. Он также будет искать расширение по умолчанию .html .

Таким образом, когда наш контроллер возвращает "home" , Thymeleaf найдет шаблон в resources/templates/home.html .

Давайте посмотрим на файл home.html :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
<html xmlns:th="http://www.thymeleaf.org">
    <head>
        <!--/*/ <th:block th:include="fragments/head :: head"/> /*/-->
    </head>
    <body>
        <div class="container-fluid">
            <div class="row">
                <div class="box col-md-6 col-md-offset-3">
                    <div class="stormpath-header">
                        <img src="http://stormpath.com/images/template/logo-nav.png"/>
                    </div>
  
                    <h1 th:inline="text">Hello, [[${account.fullName}]]!</h1>
                    <a th:href="@{/logout}" class="btn btn-danger">Logout</a>
                </div>
            </div>
        </div>
    </body>
</html>

В строке 1 задается пространство имен th для Thymeleaf.

Строка 3 выглядит как комментарий html / xml. Тем не менее, это директива, которую Thymeleaf использует для включения фрагмента в этот шаблон. Фрагмент находится по адресу: resources/templates/fragments/head.html . Этот фрагмент содержит все настройки для подключения стиля Bootstrap для наших представлений.

Строки 13 и 14, где действие. Поскольку все пути в нашем приложении заблокированы, мы знаем, что единственный способ попасть на эту страницу — это после входа в систему. Часть волшебства Stormpath заключается в том, что после входа в систему объект account всегда находится в области видимости ваших представлений. В строке 13 отображается полное имя зарегистрированного пользователя. Строка 14 предоставляет ссылку для выхода при нажатии.

Для получения дополнительной информации о работе с шаблонами Thymeleaf, нажмите здесь .

Давайте зажгем это!

Создание учетной записи Stormpath, 15 строк Java-кода и 19 строк HTML-кода шаблона (3 из которых являются значительными) привели нас к полностью функциональному приложению Spring Boot WebMVC, защищенному Spring Security и поддерживаемому Stormpath.

Если вы ранее хранили свой файл apiKey.properties в стандартном расположении: ~/.stormpath/apiKey.properties и если у вас есть только приложение Stormpath по умолчанию, которое было создано для вас, никакая другая конфигурация не требуется для запуска приложения.

Вот способ Maven:

1
2
mvn clean package
mvn spring-boot:run

Примечание. spring-boot-maven-plugin также создает Uber-JAR из-за присутствия repackage . Вы можете использовать тот же код, просто запустив Java:

1
2
mvn clean package
java -jar target/*.jar

Вот способ Gradle:

1
2
gradle clean build
java -jar build/libs/*.jar

В самом деле? Это оно? Ага!

Вы можете перейти по адресу http: // localhost: 8080 / и увидеть его в действии.

весна загрузка весна-безопасность основная

Что если вы apiKey.properties файл apiKey.properties где-то еще или у вас определены другие приложения Stormpath? Нет проблем!

Помните приложение Href, от которого вы сохранили ранее? Мы собираемся использовать это сейчас.

Вот способ Maven:

1
2
3
4
mvn clean package
STORMPATH_API_KEY_FILE=~/.stormpath/apiKey.properties \
STORMPATH_APPLICATION_HREF=https://api.stormpath.com/v1/applications/4YHCurbtcaFC4TKKsd3AYQ \
mvn spring-boot:run

Вот способ Gradle:

1
2
3
4
gradle clean build
STORMPATH_API_KEY_FILE=~/.stormpath/apiKey.properties \
STORMPATH_APPLICATION_HREF=https://api.stormpath.com/v1/applications/4YHCurbtcaFC4TKKsd3AYQ \
java -jar build/libs/*.jar

Добавляя переменные среды STORMPATH_API_KEY_FILE и STORMPATH_APPLICATION_HREF в командную строку, мы можем легко указать нашему приложению, где искать ключи API и какое приложение Stormpath использовать.

Stormpath Java SDK имеет чрезвычайно гибкий механизм настройки. Подробнее об этом мы узнаем ниже, когда перейдем к ограничению доступа к вашему приложению через членство в Stormpath Group.

Усовершенствованное управление доступом с помощью Spring Security

Код для этого раздела можно найти в теге BasicAccessControl репозитория .

кнопка

В предыдущем разделе мы создали приложение, которое было жестко заблокировано. Каждый путь, включая / , требует, чтобы вы вошли в систему в первую очередь.

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

Мы собираемся исследовать эти мелкозернистые элементы управления в этом разделе.

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

Spring Security: ваш вышибала у двери

Помните наш пустой SpringSecurityWebAppConfig.java из ранее? Мы собираемся добавить кое-что к этому сейчас:

01
02
03
04
05
06
07
08
09
10
@Configuration
public class SpringSecurityWebAppConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .apply(stormpath()).and()
            .authorizeRequests()
            .antMatchers("/").permitAll();
    }
}

Spring Security предоставляет свободный интерфейс для предоставления правил доступа.

В строках 5–8 выше мы создаем набор правил для того, как Spring Security разрешит доступ к нашему приложению.

Вы могли бы заявить это следующим образом:

1
2
Permit anyone to go to the front door
Ensure that they've authenticated for anything else

Правила, которые мы указываем, имеют приоритет перед поведением по умолчанию блокировки всего.

Давайте обновим наш шаблон home.html :

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
<html xmlns:th="http://www.thymeleaf.org">
    <head>
        <!--/*/ <th:block th:include="fragments/head :: head"/> /*/-->
    </head>
    <body>
        <div class="container-fluid">
            <div class="row">
                <div class="box col-md-6 col-md-offset-3">
                    <div class="stormpath-header">
                        <img src="http://stormpath.com/images/template/logo-nav.png"/>
                    </div>
  
                    <!--/* displayed if account IS NOT null, indicating that the user IS logged in */-->
                    <div th:if="${account}">
                        <h1 th:inline="text">Hello, [[${account.fullName}]]!</h1>
                        <a href="/restricted" class="btn btn-primary">Restricted</a>
                        <a th:href="@{/logout}" class="btn btn-danger">Logout</a>
                    </div>
  
                    <!--/* displayed if account IS null, indicating that the user IS NOT logged in */-->
                    <div th:unless="${account}">
                        <h1>Who are you?</h1>
                        <a href="/restricted" class="btn btn-primary">Restricted</a>
                    </div>
                </div>
            </div>
        </div>
    </body>
</html>

Обратите внимание, что теперь у нас есть два отдельных раздела. Первый начинается в строке 13 и отображается, если пользователь вошел в систему.

Второй раздел, начинающийся в строке 20, отображается, если пользователь не вошел в систему.

Это шаблоны Thymeleaf в действии. Он предоставляет очень мощные элементы управления для условного отображения частей шаблона.

Прежде чем вносить какие-либо дополнительные изменения, давайте сделаем паузу и запустим приложение, как и раньше.

Когда вы перейдете по адресу http: // localhost: 8080 , вы увидите неаутентифицированную версию home шаблона.

ограниченный

Нажмите кнопку Restricted , и вы будете перенаправлены на login в login как и ожидалось. После аутентификации вы окажетесь на странице 404 , потому что мы еще не определили страницу с ограниченным доступом.

Давайте настроим это, чтобы закончить этот раздел.

Определить запрещенную страницу так же просто, как добавить маршрут в наш контроллер и создать шаблон для показа. Вот обновленный HelloController.java :

01
02
03
04
05
06
07
08
09
10
11
12
13
@Controller
public class HelloController {
  
    @RequestMapping("/")
    String home() {
        return "home";
    }
  
    @RequestMapping("/restricted")
    String restricted() {
        return "restricted";
    }
}

А вот и новый шаблон limited.html:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
<html xmlns:th="http://www.thymeleaf.org">
    <head>
        <!--/*/ <th:block th:include="fragments/head :: head"/> /*/-->
    </head>
    <body>
        <div class="container-fluid">
            <div class="row">
                <div class="box col-md-6 col-md-offset-3">
                    <div class="stormpath-header">
                        <img src="http://stormpath.com/images/template/logo-nav.png"/>
                    </div>
  
                    <h1 th:inline="text">[[${account.fullName}]], You are allowed here.</h1>
                    <a href="/" class="btn btn-primary">Go Home</a>
  
                </div>
            </div>
        </div>
    </body>
</html>

Обратите внимание, как мы повторно используем фрагмент заголовка, чтобы обеспечить стилизацию Bootstrap для этого шаблона.

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

пол-ограничено

Spring Security Access Control по групповому членству

Код для этого раздела можно найти в теге GroupAccessControl репозитория .

кнопка

Spring Security предоставляет набор аннотаций и богатый язык выражений для управления доступом к методам в вашем приложении. Среди наиболее часто используемых аннотаций Spring Security — @PreAuthorize . И среди наиболее часто используемых выражений hasRolehasRole .

Stormpath интегрируется с этим механизмом, соединяющим группы Stormpath с ролями Spring Security.

Давайте посмотрим на код для этого, а затем разбить его. Мы собираемся добавить новый сервис, который ограничивает доступ членов группы. Вот AdminService :

1
2
3
4
5
6
7
@Service
public class AdminService {
    @PreAuthorize("hasRole(@roles.ADMIN)")
    public boolean ensureAdmin() {
        return true;
    }
}

Строка 3 выше является ключом, здесь. Аннотация вместе с выражением SpringEL может быть написана на простом английском языке как:

1
2
3
Before this method is even entered,
check to see that user is authenticated and
is a member of the ADMIN group

check to see that user is authenticated может не быть очевидной. Что происходит, так это то, что проверка @PreAuthorize может выполняться только для аутентифицированного пользователя. Spring Security достаточно умен, чтобы проверить, что пользователь вошел в систему, прежде чем проверять, являются ли они членом указанной группы.

Давайте углубимся в этот язык Spring Expression выше. Где Spring Security ищет @roles.ADMIN ? Символ @ является особенным — он идентифицирует Java-бин. В этом случае бин называется roles . Определившись внутри этого компонента, мы ожидаем найти константу с именем ADMIN .

В конечном счете, hasRole должен проверять уникальный Href, представляющий Stormpath Group. Итак, нашей константой ADMIN должна быть String Java, которая содержит Href для нашей группы Stormpath, используемой для администратора.

Чтобы завершить эту конфигурацию и сделать ее очень динамичной, нам нужен новый класс с именем Roles.java :

1
2
3
4
5
6
7
8
9
@Component
public class Roles {
    public final String ADMIN;
  
    @Autowired
    public Roles(Environment env) {
        ADMIN = env.getProperty("stormpath.authorized.group.admin");
    }
}

Эти 9 линий настолько удивительно мощные, что я просто выхожу отсюда! Давайте копаться в.

@Component этот класс с помощью @Component в строке 1, Spring создаст его экземпляр и предоставит его в виде bean-компонента. Угадайте, как называется боб? Spring возьмет имя класса и верблюжий случай, чтобы получить имя компонента по умолчанию. Итак, имя бина — это roles . Милая!

Аннотация @Autowired в строке 5 приводит к передаче объекта Spring Environment в конструктор. Внутри конструктора у нас есть единственная возможность установить ADMIN так как он объявлен как final — требование иметь возможность использовать его внутри предложения hasRoles .

Последняя часть головоломки использует магию конфигурации Stormpath. Обратите внимание, что мы устанавливаем значение ADMIN для любого свойства среды с именем stormpath.authorized.group.admin . Это стандартная весна. Если у вас есть свойство в файле application.properties с этим именем, оно будет доступно в среде Spring.

Stormpath добавляет возможность устанавливать это как системную переменную среды, устраняя необходимость иметь значение — в данном случае это Stormpath Group Href — жестко запрограммированное в любом месте вашего приложения.

Обычно системные переменные среды — это заглавные буквы со словами, разделенными подчеркиванием. Stormpath Java SDK автоматически преобразует эти системные переменные в точечные обозначения в нижнем регистре.

Копай это:

1
2
STORMPATH_AUTHORIZED_GROUP_ADMIN=https://api.stormpath.com/v1/groups/1wcsYMUZhzytUH5GmdaFXC \
java -jar build/libs/spring-boot-spring-security-tutorial-0.1.0.jar

За кулисами Stormpath преобразует STORMPATH_AUTHORIZED_GROUP_ADMIN переменную среды stormpath.authorized.group.admin переменную среды Spring stormpath.authorized.group.admin . Это будет подобрано нашим кодом выше.

Уф! Кто бы мог подумать, что такого волшебства можно достичь за несколько строк кода!

Теперь нам нужно AdminService к нашему контроллеру. Вот соответствующие части нашего обновленного HelloController.java :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
@Controller
public class HelloController {
  
    @Autowired
    AdminService adminService;
  
    ...
  
    @RequestMapping("/admin")
    String admin() {
        adminService.ensureAdmin();
        return "admin";
    }
}

AdminService автоматически в строках 4 и 5. Обратите внимание, что в строке 11 мы вызываем метод adminService.ensureAdmin . Если зарегистрированный пользователь НЕ находится в группе ADMIN , будет сгенерирован 403 (запрещенный) ответ.

Последнее, что нужно сделать, это создать шаблон admin.html . В коде , связанном с этим сообщением, есть простой шаблон admin.html который показывает красиво отформатированное сообщение, подтверждающее, что вы действительно являетесь администратором.

Теперь, чтобы увидеть это в действии, вам нужно немного поработать с Stormpath в консоли администратора .

Вот шаги:

  • Создать новое приложение

создать-приложение

  • Создайте новую группу с именем «admin» для приложения.

создать группу

создание-группа 2

    • Создать новую учетную запись в группе администраторов

создание-счет-в-группы

создание-счет-в-группы-2

создание-счет-в-группе-3

  • Создать новую учетную запись НЕ в группе администраторов

Регистрация

создание-счет-2

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

Давайте посмотрим на это в действии. Мы собираемся запустить приложение, как и раньше, только на этот раз мы будем использовать Hrefs, найденные в консоли администратора, для нового приложения и группы, которые вы создали на предыдущем шаге.

Вот способ Maven:

1
2
3
4
5
mvn clean package
STORMPATH_API_KEY_FILE=~/.stormpath/apiKey.properties \
STORMPATH_APPLICATION_HREF=https://api.stormpath.com/v1/applications/4YHCurbtcaFC4TKKsd3AYQ \
STORMPATH_AUTHORIZED_GROUP_ADMIN=https://api.stormpath.com/v1/groups/1wcsYMUZhzytUH5GmdaFXC \
mvn spring-boot:run

Вот способ Gradle:

1
2
3
4
5
gradle clean build
STORMPATH_API_KEY_FILE=~/.stormpath/apiKey.properties \
STORMPATH_APPLICATION_HREF=https://api.stormpath.com/v1/applications/4YHCurbtcaFC4TKKsd3AYQ \
STORMPATH_AUTHORIZED_GROUP_ADMIN=https://api.stormpath.com/v1/groups/1wcsYMUZhzytUH5GmdaFXC \
java -jar build/libs/spring-boot-spring-security-tutorial-0.1.0.jar

Перейдите на страницу /admin .

Если вы войдете в систему как пользователь, которого вы создали в группе admin Stormpath (в моем случае [email protected]), вы получите доступ к странице администратора. Если вы войдете в систему как созданный вами пользователь, который НЕ входит в группу admin Stormpath (в моем случае [email protected]), вы получите запрещенную страницу.

Независимо от того, кто вы вошли в систему, у вас будет доступ к странице /restricted как мы настраивали ранее.

пол-ограничено

Завершение

Ну, мы здесь много чего сделали, не так ли!

Мы увидели, как вы можете защитить отдельные страницы, а также защитить методы, основанные на членстве в группе.

Мы увидели, как вы можете применить Stormpath в своем классе, который расширяет WebSecurityConfigurerAdapter чтобы определять элементы управления доступом для разных путей, а также использовать аннотацию Spring Security @PreAuthorize для более точного контроля.

Мы увидели почти волшебный способ, которым Stormpath Java SDK управляет свойствами конфигурации среды, чтобы обеспечить высокую степень гибкости для вашего приложения без необходимости что-либо жестко кодировать.

В Java SDK и интеграции с Spring Boot гораздо больше возможностей. Проверьте подробное руководство здесь .

Не стесняйтесь в любое время связаться со службой поддержки или лично со мной .

Управление идентификацией здания, включая аутентификацию и авторизацию? Попробуйте Stormpath! Наш REST API и надежная поддержка Java SDK могут устранить риск для безопасности и могут быть реализованы за считанные минуты. Зарегистрируйтесь и никогда больше не создавайте аутентификацию!