Как получить статус ответа Tomcat JaasRealm с помощью пользовательского модуля входа - PullRequest
0 голосов
/ 06 сентября 2018

Я использую Tomcat CMA, используя JaasRealm с пользовательским модулем входа. В этом я переопределяю метод boolean LoginModule#login(). Теперь, когда запрос входит в контекст веб-приложения, сначала он проходит проверку подлинности с помощью этого метода входа в систему. Так как этот метод входа имеет boolean тип возврата

  @Override
    public boolean login() throws LoginException {

        Callback[] callbacks = new Callback[2];

, поэтому, если возвращаемое значение равно true, то он завершает выполнение следующего запроса, а если возвращаемое значение равно false, то возвращается 401 Status. В некоторых случаях я хочу вернуть значение, отличное от 401, при возврате значения false. Но похоже, что это невозможно для меня. Любая идея, как я могу отправить обратно мой измененный статус в ответ, когда loginModule возвращает false.

1 Ответ

0 голосов
/ 13 сентября 2018

Вы не можете влиять на ответ ни в модулях входа в систему, ни в JAASRealm, эти классы просто создают принципала, если аутентификация прошла успешно, или, в противном случае, обнуляют JAASRealm поверх этой ласточки каждое исключение.

Итак, чтобы сделать это, вы должны

  • расширить JAASRealm, переопределить аутентификацию и выдать исключение AccountExpiredException / FailedLoginException / и т.д. как завернутое непроверенное исключение (пользовательское RuntimeException)
  • расширить класс DigestAuthenticator и переопределить doAuthenticate (или скопировать весь источник, это, безусловно, сработает), перехватить там ваши пользовательские исключения RuntimeException и использовать response.sendError (), чтобы установить код ответа на то, что вы хотите
  • сконфигурируйте все как обычно, используя ваш собственный класс JAASRealm, и CustomDigestAuthenticator должен быть зарегистрирован (я не знаю, что это можно сделать менее глобальным способом)

Подобную тему можно найти здесь

...