Пользователь (% u) отсутствует в журналах доступа Tomcat при использовании Spring Security - PullRequest
1 голос
/ 06 ноября 2019

Я запускаю пример веб-приложения Spring Security (hello world) в Apache Tomcat 8. Я пытаюсь увидеть информацию о пользователях в журналах доступа Tomcat, но похоже, что этой информации там нет. Пример для записей журнала доступа:

0:0:0:0:0:0:0:1 - - [06/Nov/2019:09:41:57 +0200] "GET / HTTP/1.1" 200 422
0:0:0:0:0:0:0:1 - - [06/Nov/2019:09:41:59 +0200] "GET /hello HTTP/1.1" 200 83

Конфигурация журнала доступа в Tomcat server.xml:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log" suffix=".txt"
           pattern="common" />

pattern="common" соответствует общему формату журнала, определенному как «% h». % l% u% t "% r"% s% b ', как описано здесь . Документация Tomcat также гласит:

% u - Удаленный пользователь, который был аутентифицирован (если есть), иначе '-'

Есть ли какие-либо дополнительные настройки, к которым я должен применитьсделать пользователя видимым в журналах доступа?

1 Ответ

0 голосов
/ 06 ноября 2019

Когда ответил , он может работать не так, как ожидалось

Клапан регистрации доступа Tomcat, это не будет работать, так как Tomcat не знает о Spring Security, которая работает полностью внутриваше приложение.

Вы можете использовать фильтр:

Самый простой вариант - просто добавить свой собственный фильтр (например, в web.xml) после Spring Security, идамп нужной информации

Другое решение , предложенное в Config9 , вам может потребоваться включить имя пользователя в качестве атрибута сеанса

Возможно, этого недостаточнотак как общий шаблон уже содержит% u параметр. В этом случае я бы рекомендовал два дополнительных шага:

1) Поместить имя пользователя в параметр сеанса запроса, например:

request.getSession().addAttribute("username", user.getName());

2) Добавить следующий параметр в шаблон журнала доступа:% {имя пользователя} s

server.tomcat.accesslog.pattern=%h %l %t %u %{username}s "%r" %s %b
...