Добрый день.Весенняя обувь + Весенняя безопасность: как подавить основную форму авторизации
Я использую Spring security в контексте загрузочного автозапуска Spring. Моя цель - настроить базовый auth таким образом, чтобы базовая форма авторизации стандартного браузера не отображалась на 401. Из Google я узнал, что для этого мне нужно изменить заголовок «WWW-Authenticate» по умолчанию на нечто иное, чем « Basic xxxxx ".
Чтобы сделать это, я объявил фильтр:
@Bean
@Order(Integer.MAX_VALUE)
public Filter customAuthFilter() {
return new Filter() {
@Override
public void init(FilterConfig fc) throws ServletException {
}
@Override
public void doFilter(ServletRequest sreq, ServletResponse sresp, FilterChain fc) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) sreq;
HttpServletResponse resp = (HttpServletResponse) sresp;
fc.doFilter(req, resp);
log.info("filter");
log.info("status " + resp.getStatus());
if(resp.getStatus() == 401) {
resp.setHeader("WWW-Authenticate", "Client-driven");
}
}
@Override
public void destroy() {
}
};
Из журналов я вижу, что мой фильтр успешно распознается приложением и принимает участие в ответах обработки (я вижу сообщения журнала из doFilter). Но фактический ответ, полученный браузером, по-прежнему содержит стандартный заголовок «WWW-Authenticate». Кажется, что кто-то переопределяет мой заголовок, я не знаю, кто это точно.
Не могли бы вы дать совет?
Спасибо за ответ. Я пробовал обычный способ, о котором вы упоминали, - это действительно полезно, но это не то, что я ищу. Кажется, что AuthenticationFailureHandler запускается только при неудачной попытке аутентификации (недопустимые учетные данные, отправленные пользователем в форме входа). Но то, что я ищу, - это способ прозрачной настройки некоторых заголовков ответов, прежде чем отвечать на HTTP-клиент. В исходной среде сервлетов я смог сделать это с помощью фильтров, но весной этот подход работает по-разному ... – skapral
Фильтры - это фильтры. Единственная проблема, которую я предвижу, заключается в том, что вам может понадобиться замаскировать ответ, чтобы он не был зафиксирован, прежде чем ваш фильтр сможет выполнить свою задачу. Но вы сказали, что у вас уже есть такая работа, поэтому все, что вам нужно сделать, это получить ее в правильном порядке. Это довольно просто (просто измените порядок). –