Я думаю о внедрении React в пользовательский интерфейс,
поэтому я собираюсь реализовать вход с помощью JWT вместо сеанса.
Все запросы проходят через шлюз ApiGateway, поэтому
аутентификация выполняется в шлюзе API.
ApiGateway
Короче говоря…
Добавьте Фильтр проверки подлинности токена в шлюз,
Примените фильтр ко всем запросам, кроме запросов на вход
При входе выдайте токен и
Все остальные запросы должны содержать токены.
Что такое ЮВТ?
Позвольте мне применить 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)
Это действительно конец…
Теперь сделайте это
видно, что фильтр применяется правильно
Я собираюсь войти в систему и получить токен
Логин не фильтруется, поэтому он может работать без токена
Повторите предыдущий запрос, включая токен