Пустой экран появляется в браузере при сбое аутентификации клиента на сервере причала

Я создал API для отдыха Java, используя встроенный сервер причала, и включил аутентификацию клиента. В клиентской аутентификации я получаю CN сертификата клиента и смотрю, разрешен ли он. Я создал класс Filter для обработки вышеуказанной логики аутентификации клиента. Однако, когда аутентификация клиента завершается сбоем и фильтр возвращается, ответ не отправляется обратно, и в браузере появляется пустой экран, откуда был выполнен вызов API. В идеале он должен ответить с некоторой ошибкой. Я запускаю API из браузера, в котором я уже добавил действительные клиентские сертификаты.

В объекте ответа фильтра я уже добавил статус возврата в ответ и некоторые другие вещи, чтобы он завершил запрос, но это не сработало.

Enabling client auth which configuring SslContextFactory:

SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setKeyStore(keyStore);
sslContextFactory.setKeyStorePassword("changeit");
sslContextFactory.setKeyManagerPassword("changeit");
sslContextFactory.setCertAlias("selfsignlatest");
sslContextFactory.setNeedClientAuth(true);
sslContextFactory.setTrustStore(keyStore);
sslContextFactory.setTrustStorePassword("changeit");
Filter class doFilter method:

@Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        logger.debug("Filtering incoming request....");
        boolean isValid = false;
        HttpServletRequest httpreq = (HttpServletRequest) request;
        HttpServletResponse httpresp = (HttpServletResponse) response;
        X509Certificate[] certificates = (X509Certificate[]) httpreq.getAttribute("javax.servlet.request.X509Certificate");
        if (certificates!=null && certificates.length>0) {
            for(X509Certificate cert: certificates) {
                commanName = getCNfromDomainName(cert.getSubjectX500Principal().getName());
                if (commanName!=null && commanName.equals("clientjetty")) {
                    isValid = true;
                    break;
                }
            }
        }

        if (isValid) {
            chain.doFilter(request, response);
        }else {
            httpresp.reset();
            httpresp.setHeader("Connection", "close");
            httpresp.setStatus(HttpStatus.SC_UNAUTHORIZED);
            httpresp.flushBuffer();
            httpresp.sendError(-1);
            return;
        }
    }
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Заменять ...

httpresp.reset();
httpresp.setHeader("Connection", "close");
httpresp.setStatus(HttpStatus.SC_UNAUTHORIZED);
httpresp.flushBuffer();
httpresp.sendError(-1);

с участием ...

httpresp.setHeader("Connection", "close");
httpresp.sendError(HttpStatus.SC_UNAUTHORIZED);

Добро пожаловать в Stackoverflow! Если ответ сработал для вас, принято указывать этот конкретный ответ как «принятый». (рядом с ответом должна быть серая галочка, которую вы, задающий вопрос, можете отметить, указав, что это рабочий ответ)

Joakim Erdfelt 10.04.2019 15:49

Другие вопросы по теме