Обрабатывать ответ на сервере ресурсов в случае, если сервер авторизации не работает | Безопасность Spring с OAuth 2 - PullRequest
0 голосов
/ 11 июля 2020

Итак, я успешно реализовал отдельный сервер авторизации и сервер ресурсов. Я добавил 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);
    }

Мне трудно изменить эту страницу с ошибкой. Итак, как с этим справиться и как я могу добавить свой собственный ответ?

...