Фильтр на j_security_check не работает. Glassfish V3 Netbeans 6,8 - PullRequest
1 голос
/ 22 марта 2010

Я пытаюсь выполнить фильтр для j_security_check для выполнения некоторых действий после входа в систему, таких как изменение URL-адреса перенаправления и т. Д. Но проблема в том, что мой фильтр никогда не выполняется. Любое лоскутное одеяло, которое я могу применить? Любая помощь будет оценена. Я буквально сыт по горло безопасностью, управляемой контейнером.

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 22 марта 2010

Вы не можете программно зацепить /j_security_check. Это ограничение безопасности.

Лучше всего определить первый вход в систему, вручную проверив учетную запись пользователя в HttpSession и указать ее там, если она отсутствует, а затем выполнить свою задачу. Я опубликовал аналогичный ответ раньше здесь . Вот фрагмент кода фильтра, вам просто нужно сопоставить фильтр с нужным url-pattern, охватывающим защищенные страницы.

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);
}
0 голосов
/ 16 декабря 2014

Одно портативное решение.

  1. Зарегистрировать глобальный фильтр по шаблону / *;

  2. В doFilter () попробуйте получить пользовательский объект из сеанса (т. Е. Рабочее пространство пользователя);

  3. если объект равен нулю, поместите новый объект в сессию и выполните логику после входа в систему.

    public void doFilter(
         ServletRequest request,
         ServletResponse response,
         FilterChain chain
      ) throws IOException, ServletException
      {
         Principal principal = request.getUserPrincipal();
    
         if(principal != null) {
            UserWorkspace uwks = (UserWorkspace) getSession(request).getAttribute("com.foo.myproject.userworkspace");
    
            if (uwks == null) {
              uwks = new UserWorkspace(principal);
              getSession(request).setAttribute("com.foo.myproject.userworkspace", uwks);
    
              //
              // post-login code here
              //
    
            }
         }
    
         chain.doFilter(request, response);
      }
    
0 голосов
/ 22 марта 2010

ИМХО вам не следует пытаться перехватить систему аутентификации контейнера; в вашем случае URL перенаправления может быть декларативно установлен в web.xml.

Если вы хотите выполнить некоторые действия после аутентификации, я предлагаю настроить фиктивный сервлет / jsp после аутентификации, который делает то, что вы хотите, а затем перенаправляет на запрошенный ресурс. Этот сервлет после аутентификации может быть правильно настроен как страница после авторизации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...