Извлечение субъекта, выполняющего действие java.security.PrivilegedAction во время выполнения - PullRequest
3 голосов
/ 01 декабря 2010

Я пытаюсь получить Субъект, который в данный момент выполняет Привилегированное Действие в рамках JAAS, чтобы иметь возможность извлечь его принципалы.По сути, мне нужно во время выполнения убедиться, что Привилегированное действие действительно выполняется участником, который имеет право сделать это.

Или, иначе говоря: возможно ли получить текущий LoginContext по адресувремя выполнения как какое-то системное свойство (а не путем создания нового)?Это легко позволило бы извлечь Предмет.

Ответы [ 2 ]

3 голосов
/ 02 декабря 2010

Вы уверены, что вам нужен LoginContext?

Если вам просто нужен субъект (со всеми прикрепленными принципалами), вы можете сделать

 Subject activeSubject = Subject.getSubject(AccessController.getContext());
0 голосов
/ 01 декабря 2010

Я думаю, вам нужно управлять таким механизмом самостоятельно. Например, если это веб-приложение, в котором вы выполняете аутентификацию один раз, а затем связываете аутентификацию с сеансом. Вы сохраняете LoginContext в сеансе. Одним из способов сделать его доступным в других частях кода было бы создание локальной обертки потока, которую вы устанавливаете / удаляете в начале / конце каждого вызова потока (такого как запрос).

public class LoginContextHolder {

    private static ThreadLocal<LoginContext> ctx = new ThreadLocal<LoginContext>();

    public static void set(LoginContext lc) {
        ctx.set(lc);
    }

    public static LoginContext get() {
        return ctx.get();
    }

}


public class LoginContextFilter implements Filter {

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {

       LoginContext ctx = null;
       HttpSession sess = (HttpSession)((HttpRequest)request).getSession(false);
       if (sess != null) {
          ctx = (LoginContext)sess.getAttribute("ctx");
       }

       try {
         LoginContextHolder.set(ctx);
          chain.doFilter(request, response);
       } finally {
         LoginContextHolder.set(null);
       }

    }


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