Apache Shiro ThreadContext # bind (Тема) vs ThreadContext.bind (SecurityManager) - PullRequest
0 голосов
/ 06 мая 2020

Я только учусь Apache Широ и столкнулся с проблемой. В примерах, которые я вижу в inte rnet, точкой входа для защиты потоков является следующий код:

  try {
        ThreadContext.bind(subject);
        //main code here
    } finally {
        ThreadContext.unbindSubject();
    }

Однако, согласно документации , существуют следующие методы:

stati c void bind (SecurityManager securityManager) Удобный метод, упрощающий привязку экземпляра SecurityManager приложения к ThreadContext.

stati c void bind (Subject subject) Удобный метод, упрощающий привязку В зависимости от ThreadContext.

stati c SecurityManager unbindSecurityManager () Удобный метод, который упрощает удаление экземпляра SecurityManager приложения из потока.

stati c Subject unbindSubject () Удобный метод, который упрощает удаление из потока локального субъекта потока.

Может ли кто-нибудь объяснить, когда (в каких ситуациях) нам нужно привязать Subject, а когда SecurityManager?

1 Ответ

1 голос
/ 07 мая 2020

Это зависит от того, что делает ваш код, большую часть времени вам просто нужна ссылка на ваш Subject, но, если ваш собственный код что-то делает с SecurityManager, Shiro также предоставляет утилиту для этого.

Тем не менее, вы, вероятно, захотите использовать subject.excute(...) вместо этого в большинстве случаев: https://shiro.apache.org/subject.html#thread -association

TL; DR, если у вас нет кода, который напрямую использует диспетчер безопасности, используйте автоматическая ассоциация потоков через subject.execute

...