Большинство сервлет-контейнеров действительно не разрешают перехватывать запросы /j_security_check
из-за соображений безопасности. Подойдут некоторые старые версии, но это должно быть исправлено в новых версиях.
В любом случае, лучший способ зацепить это - проверить наличие принципала пользователя в HttpSession
, который вы добавили туда вручную, если он отсутствует.
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
HttpServletRequest httpRequest = (HttpServletRequest) request;
UserPrincipal user = httpRequest.getUserPrincipal();
HttpSession session = httpRequest.getSession();
if (user != null && session.getAttribute("user") == null) {
session.setAttribute("user", user);
// First-time login. You can do your intercepting thing here.
}
chain.doFilter(request, response);
}