Я новичок на весну oauth2. С проверкой документа я выполняю простую функцию для oauth2 в среде Spring Cloud alibaba nacos.
В проекте я хочу добавить перенаправление для запроса oauth от шлюза к микросервису auth. Затем авторизуйтесь микросервисом auth с помощью формы входа и авторизуйте область действия, затем перенаправьте на URL-адрес перенаправления, указанный в URL-адресе oauth.
При прямом запросе на микросервис auth он работает хорошо. Но если отправить запрос на шлюз, после входа в систему он будет перенаправлен в направлении «/» и вызовет ошибку 404.
При исследовании SavedRequestAwareAuthenticationSuccessHandler я обнаружил, что сеанс, содержащийся в запросе, имеет значение null . Более того, я проверяю HttpSessionRequestCache , он также получает нулевой сеанс при сохранении запроса. Поскольку запрос не сохраняется, он не может перенаправить на исходный URL-адрес после входа в систему и перенаправить на URL-адрес по умолчанию "/".
Но я не знаю, почему сеанс, связанный с запросом, пуст. Я также пытаюсь сделать демонстрационный проект, например:
@RequestMapping(value = "hello",method = RequestMethod.GET)
public RedirectView hello(HttpServletRequest request){
System.out.println("Hello:"+request.getSession().getId());
return new RedirectView("thanks");
}
@RequestMapping(value = "thanks",method = RequestMethod.GET)
public ResponseEntity<String> thanks(HttpServletRequest request){
System.out.println("Thanks:"+request.getSession().getId());
return new ResponseEntity("aaa",HttpStatus.OK);
}
При использовании шлюза напечатанные идентификаторы сеанса отличаются. Но без шлюза они такие же. Ниже приведены настройки моего шлюза:
server:
port: 8080
spring:
application:
name: flower-gateway
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
gateway:
discovery:
locator:
enabled: true
routes:
- id: order-routes
uri: lb://flower-order
predicates:
- Path=/order/**
- id: core-routes
uri: lb://flower-core
predicates:
- Path=/**
- id: auth-routes
uri: lb://flower-auth
predicates:
- Path=/oauth/**
Итак, я предполагаю, что это вызвано весенним облачным шлюзом. Но я не знаю, как это исправить. Пожалуйста, дайте мне некоторую информацию. Спасибо.
Новые обновления:
Когда я меняю шлюз аутентификации на
- id: auth-routes
uri: https://127.0.0.1:8082
predicates:
- Path=/oauth/**
, он проходит нормальное поведение. Значит ли это, что это вызвано балансировкой нагрузки. Но поскольку у меня всего одна работающая сущность, я не совсем уверен. Означает ли это, что следует использовать управление сеансом распространения, например весенний сеанс? Как и в реальной производственной среде, служба аутентификации не будет иметь только одну сущность.