Итак, я успешно реализовал отдельный сервер авторизации и сервер ресурсов. Я добавил CustomAccessDeniedHandler и CustomAuthenticationEntryPoint для обработки отсутствующего или недопустимого токена-носителя. Я просто хочу обработать ответ на сервере ресурсов в случае, если сервер аутентификации не работает.
Прямо сейчас, если я отключу свой сервер аутентификации и попытаюсь поразить любой контроллер, я получаю следующий ответ:
Страница внутренней ошибки сервера
В консоли я получаю следующее исключение:
org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://localhost:8081/vshop/oauth/check_token": Connection refused: connect; nested exception is java.net.ConnectException: Connection refused: connect
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:748) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:674) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]
.
.
.
.
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method) ~[na:1.8.0_171]
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) ~[na:1.8.0_171]
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_171]
.
.
.
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:739) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]
... 56 common frames omitted
Я также добавил @RestControllerAdvice и добавил вышеупомянутые исключения в @ExceptionHandler.
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler({ResourceAccessException.class, ConnectException.class, RestClientException.class})
public ResponseObject handleResourceAccessExceptions(ResourceAccessException ex) {
LOGGER.error("Unable to access server -> {}", ex.getMessage());
return new ResponseObject();
}
My ResourceServerConfiguration выглядит следующим образом:
@Configuration
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
private RestAccessDeniedHandler accessDeniedHandler;
private RestAuthenticationEntryPoint authenticationEntryPoint;
@Autowired
public void setAccessDeniedHandler(RestAccessDeniedHandler accessDeniedHandler) {
this.accessDeniedHandler = accessDeniedHandler;
}
@Autowired
public void setAuthenticationEntryPoint(RestAuthenticationEntryPoint authenticationEntryPoint) {
this.authenticationEntryPoint = authenticationEntryPoint;
}
@Override
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/common/test")
.permitAll()
.anyRequest().authenticated()
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.exceptionHandling()
.accessDeniedHandler(accessDeniedHandler)
.authenticationEntryPoint(authenticationEntryPoint);
}
@Override
public void configure(ResourceServerSecurityConfigurer resources) {
resources
.resourceId("test-resource1")
.resourceId("test-resource2")
.accessDeniedHandler(accessDeniedHandler)
.authenticationEntryPoint(authenticationEntryPoint);
}
Мне трудно изменить эту страницу с ошибкой. Итак, как с этим справиться и как я могу добавить свой собственный ответ?