Я пытаюсь настроить простое приложение 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.
До сих пор я пробовал:
- Явное принудительное кодирование HTTP UTF-8 в application.properties
- Регистрация
CharacterEncodingFilter
с использованием FilterRegistrationBean
- Использование
addFilterBefore
в WebSecurityConfigurerAdapter
(несколько вариации с различными фильтрами в качестве параметра beforeFilter
- Добавление компонента
CharacterEncodingFilter
с @Order(Ordered.HIGHEST_PRECEDENCE)
к SpringBootServletInitializer
(с примечанием @SpringBootApplication
, поскольку это моя точка входа) - Расширение
AbstractSecurityWebApplicationInitializer
и переопределение beforeSpringSecurityFilterChain
- Добавление
FilterRegistrationBean
, настройка фильтра в нем и установка порядка очень маленького числа - Регистрация собственного фильтра, в котором я явно установил кодирование запроса и ответа в UTF-8
- Переопределение
onStartup
в SpringBootServletInitializer
и добавление фильтра непосредственно в контекст сервлета
Соответствующие строки получаются с помощью Spring Security taglib as <security:authentication property="principal.firstName"/>
. Текст правильно закодирован, если зарегистрирован с использованием SLF4J. Я бы хотел избежать использования дескриптора развертывания web. xml, поскольку до сих пор это было приложение Spring Booti sh.