Как настроить UTF-8 в Spring Boot 2 с представлениями Spring MVC & Security, Jasig CAS и JSP? - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь настроить простое приложение Spring Boot с аутентификацией CAS с использованием Spring Security, все представления являются JSP и отображаются с использованием Spring MVC. Однако я столкнулся с проблемой кодировки символов при тестировании защищенного представления. Символы, отличные от ASCII, отображаются неправильно (например, š вместо š, á вместо á et c.).

Я использую Spring Boot 2.2.4 и клиентское ядро ​​CAS 3.6.1. Приложение построено с использованием Maven (с настраиваемым родителем) и развернуто в полном экземпляре Tomcat 9.0.30 (конфигурация по умолчанию) в виде файла WAR.

До сих пор я пробовал:

  1. Явное принудительное кодирование HTTP UTF-8 в application.properties
  2. Регистрация CharacterEncodingFilter с использованием FilterRegistrationBean
  3. Использование addFilterBefore в WebSecurityConfigurerAdapter (несколько вариации с различными фильтрами в качестве параметра beforeFilter
  4. Добавление компонента CharacterEncodingFilter с @Order(Ordered.HIGHEST_PRECEDENCE) к SpringBootServletInitializer (с примечанием @SpringBootApplication, поскольку это моя точка входа)
  5. Расширение AbstractSecurityWebApplicationInitializer и переопределение beforeSpringSecurityFilterChain
  6. Добавление FilterRegistrationBean, настройка фильтра в нем и установка порядка очень маленького числа
  7. Регистрация собственного фильтра, в котором я явно установил кодирование запроса и ответа в UTF-8
  8. Переопределение onStartup в SpringBootServletInitializer и добавление фильтра непосредственно в контекст сервлета

Соответствующие строки получаются с помощью Spring Security taglib as <security:authentication property="principal.firstName"/>. Текст правильно закодирован, если зарегистрирован с использованием SLF4J. Я бы хотел избежать использования дескриптора развертывания web. xml, поскольку до сих пор это было приложение Spring Booti sh.

1 Ответ

0 голосов
/ 24 января 2020

После неудачной попытки исправить это, используя несколько дополнительных подходов, мой коллега предложил посмотреть, есть ли что-нибудь из CAS, где можно установить кодировку символов.

Оказывается, что бин Cas30ServiceTicketValidator был нарушителем как-то удалось переопределить настройки всех подходов, перечисленных в вопросе (и еще нескольких). Это версия, которая в итоге заработала:

@Bean
public TicketValidator ticketValidator() {
    Cas30ServiceTicketValidator validator = new Cas30ServiceTicketValidator("https://example.com/cas");
    validator.setEncoding("UTF-8"); //This had to be added
    return validator;
}

Никаких дополнительных изменений после этого не потребовалось, остальные были более или менее настроены в соответствии с Учебник Baeldung по Spring Security CAS SSO .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...