Я думаю о внедрении React в пользовательский интерфейс,
поэтому я собираюсь реализовать вход с помощью JWT вместо сеанса.

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

ApiGateway



[Spring] Создание шлюза API с помощью Spring Cloud Gateway (SCG)
ранее создал сервер Eureka и зарегистрировал клиент Eurekamedium.com



Короче говоря…
Добавьте Фильтр проверки подлинности токена в шлюз,
Примените фильтр ко всем запросам, кроме запросов на вход

При входе выдайте токен и
Все остальные запросы должны содержать токены.

Что такое ЮВТ?



Позвольте мне применить JWT в моем PRJ
Сначала изменим UserService (MicroServices)

Пользовательская служба

UserService/pom.xml
<!-- JWT -->
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.1</version>
</dependency>
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.1</version>
</dependency>
<!-- UsernamePasswordAuthenticationFilter -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
</dependency>

Я собираюсь сделать их Бин и использовать

И заставит AuthenticationFilter в UserService
наследовать UsernamePasswordAuthenticationFilter

сделайте Vo для использования перед созданием AuthenticationFilter

Внесите изменения в соответствии с вашим проектом

Теперь создайте метод для создания токена.

Установите время окончания и ключ
Это конец службы AuthenticationFilter
, которую необходимо изменить перед применением фильтра.

расширяет UserDetailsService

Вернуться после предоставления полномочий

И добавьте AuthenticationFilter ко всем запросам.
в /security/WebSecurity.java

IpAddress : IP-адрес шлюза или другой

Теперь запустите вход

Нет необходимости создавать контроллер
Поскольку он предоставляется Spring Security

Остался только один вариант: изменение шлюза API.

Шлюз API

Сначала сделайте фильтр
и примените к запросам

ApiGateway/pom.xml
<!-- JWT -->
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.1</version>
</dependency>
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.1</version>
</dependency>

Сделать фильтр в Api Gateway

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

Необходимо использовать тот же ключ

И создайте обработку ошибок.

Если сделать эту функцию, это сделано

Удаляет имя токена

Укажите, где применить этот фильтр в .yml

Не применять фильтры к логину
Добавить фильтр к оставшимся запросам (GET, POST)

Это действительно конец…
Теперь сделайте это

видно, что фильтр применяется правильно
Я собираюсь войти в систему и получить токен
Логин не фильтруется, поэтому он может работать без токена

Повторите предыдущий запрос, включая токен