0

Приложение Spring Boot 1.3.3 использует Spring Security. Нам нужно регистрировать HTTP-запросы, включая запрошенный URL-адрес, HTTP-глагол, время обработки, пользовательский принцип.Принцип сервлета в фильтре с высоким приоритетом, используя Spring Security

Это делается с использованием настраиваемого фильтра сервлетов.

Пользовательский фильтр должен иметь более высокий приоритет (т. Е. Меньший порядок), чем цепочка фильтров Spring Security, иначе он не будет выполнен для запросов, отвергнутых Spring Security.

Но тогда в пользовательском фильтре HttpServletRequest: getUserPrincipal - всегда null. Похоже, Spring Security удаляет информацию о безопасности после того, как будет создана цепочка безопасности.

Есть ли стандартный способ (то есть без локальной локальной магии), чтобы всегда получать от пользователя пользовательский фильтр при использовании Spring Security?

Спасибо за ваше время.

ответ

1

Ну, как вы используете Spring Security, принципал, скорее всего, будет установлен именно в технике Spring Security. Но что еще хуже, это то, что он использует обработку запросов, поэтому вы не найдете принципала ни перед вызовом FilterChain, потому что он не был установлен, ни после того, как он был установлен в HttpServletRequestWrapper, которого больше нет здесь.

Итак, ваш лучший выбор - разместить собственный фильтр в цепочке весенней безопасности, незадолго до ExceptionTranslationFilter, регистрироваться после цепочки и проходить по любому исключению.