TLDR: Мой метод требует 2 перенаправления / пересылки для работы (1 для аутентификации и 1 для обслуживания страницы jsp). Как я могу разрешить оба перенаправления / пересылки (или сделать это необязательным), чтобы не столкнуться с ошибкой, java .lang.IllegalStateException: Невозможно переслать после того, как ответ был зафиксирован.
Для получения дополнительной информации контекст:
У меня есть java сервлет с методом, который выглядит примерно так:
@GET
@Path("/test")
@Authenticate
public Viewable test(@Context HttpServletRequest request, @Context HttpServletResponse response) {
Map<String, Object> model = createModel();
return new Viewable("/somePath/jspFile", model);
}
Аннотация @Authenticate перехватывает вызов для выполнения некоторых Open ID Connect тип аутентификации, который приводит к тому, что пользователь перенаправляется на другой сервер для всех нужд аутентификации. Если пользователь прошел проверку подлинности, он перенаправляется обратно в мое приложение.
Однако при нажатии URL-адреса для этого метода я получаю java .lang.IllegalStateException: Невозможно переслать после получения ответа привержен . Я не слишком много знаю об использовании этого Viewable класса, но основываясь на том факте, что я не сталкиваюсь с этой ошибкой при возврате String / void / что-либо еще, я предполагаю, что возвращать новый Viewable необходимо выполнить переадресацию, в результате которой пользователь увидит страницу jsp.
Я прочитал основной пост ТАК об этой ошибке , но я не уверен, как применить исправления к моей текущая проблема. Например, я не знаю, как бы я применил что-то вроде следующего исправления:
protected void doPost() {
if (someCondition) {
sendRedirect();
} else {
forward();
}
}
Исправление предполагает, что я могу либо перенаправить, либо переслать, но мой текущий метод нуждается в перенаправлении для аутентификации И переадресация / перенаправление на страницу jsp. Может быть, я упускаю очевидное исправление, которое не требует полного пересмотра текущего кода?
Редактировать: Было бы неплохо, если бы я мог проверить, был ли пользователь аутентифицирован первым, но я Предположим, что использование этой аннотации вообще автоматически влечет за собой первоначальное перенаправление
Редактировать: похоже, что пользователь перенаправлен для первоначальной аутентификации при входе в систему, но его не нужно перенаправлять снова после аутентификации один раз из-за SSO