Широ Гайс РазрешенияResolver

В документации Shiro они настраивают глобальный PermissionsResolver в файле shiro.ini (см. permissionResolver ).

globalPermissionResolver = com.foo.bar.authz.MyPermissionResolver
...
securityManager.authorizer.permissionResolver = $globalPermissionResolver

Однако я использую Guice, поэтому не хочу полагаться на shiro.ini. Я знаю, что могу вызвать setPermissionResolver() в моем Realm, но я бы этого не хотел, так как у меня есть несколько Realm.

Есть идеи? Спасибо.


person user2573153    schedule 04.09.2014    source источник
comment
Что плохого в вызове сеттера на все ваши реалмы? Либо так, либо с помощью shiro.ini.   -  person Wouter    schedule 05.09.2014
comment
Наверное. просто есть globalPermissionResolver, если вы прикрепите его к менеджеру безопасности, поэтому я подумал, что есть способ изменить его (без shiro ini), а не вызывать этот сеттер повсюду.   -  person user2573153    schedule 05.09.2014


Ответы (1)


Оказывается, при более внимательном прочтении упомянутых выше документов говорится, что:

If you want to configure a global PermissionResolver, each Realm that is to receive the configured PermissionResolver must implement the PermisionResolverAware interface. This guarantees that the configured instance can be relayed to each Realm that supports such configuration.

Также бывает, что AuthorizingRealm уже реализует этот интерфейс, поэтому все авторизующие области должны иметь возможность получить PermissionsResolver.

Чтобы связать его с Guice, я добавил это в свой ShiroWebModule:

    bind(PermissionResolver.class).to(MyPermissionResolver.class).in(Singleton.class);
person user2573153    schedule 19.09.2014