2014-09-23 6 views
2

Я пишу службу, в которой я использую Shiro для обеспечения безопасности. Я также включил в него Guice. Я создаю Guice инжектор в GuiceServletContextListener:Shiro AOP с GUICE не работает

//Custom Shiro Web module with defined REALM 
new MyShiroWebModule(this.servletContext, "/v1/*"), 

//Shiro annotations 
new MyAOPModule(), 

Я также связать Guice контейнер и GuiceShiroFilter в JerseyServletModule:

serve("/v1/*").with(GuiceContainer.class, params);     
//Adds Shiro filtering 
MyShiroWebModule.bindGuiceFilter(binder()); 

Но Аннотации от Shiro просто не похоже на работу!

настроить цепочки в MyShiroWebModule:

addFilterChain("/v1/res/test", ANON); 
addFilterChain("/v1/**", ROLES, AUTHC_BASIC); 

Так что, если я использую "РОЛИ" фильтр, то он сканирует для ролей в АОП манере:

@RolesAllowed("SomeFancyRole") (СМ EDIT)

Но я хотел бы использовать функциональность GUICE Shiro AOP. Я попробовал базовый ShiroAOPModule вместо моего собственного -> my для отладки, чтобы узнать, вызвана ли конфигурация.

@User, @Authenticated etc.

Как я могу включить эту функцию в качестве документации говорится, что только «добавление» ShiroAOPModule должен работать из коробки? Спасибо заранее

EDIT:

Оказывается, что @RolesAllowed работает благодаря добавлению:

params.put(PackagesResourceConfig.PROPERTY_RESOURCE_FILTER_FACTORIES, "com.sun.jersey.api.container.filter.RolesAllowedResourceFilterFactory");

в JerseyServletModule

serve("/v1/*").with(GuiceContainer.class, params);

Так АОР от Сиро до сих пор не фильтруется.

ответ

0

Вы можете изменить его для стандартного класса ShiroAopModule. Он должен быть инициализирован после вашего подкласса ShiroWebModule. Это фрагмент, чтобы сделать работу с ServletModule Джерси 1.18.1, Guice 3 и Apache Shiro 1.2.3

public class BootstrapServletModule extends ServletModule{ 

private static final String propertyPackages= GenericBootstrapConstants.JERSEY_PROPERTY_PACKAGES; 

@Override 
protected void configureServlets() { 
    super.configureServlets(); 

    //get the bootstrapping Properties file 
    install(new BootstrapPropertiesModule()); 

    //Initialize Persistence JPA Unit of Work if present 
    //install(new MyUnitOfWorkModule()); 
    //Initialize Apache Shiro if present 
    install(new BootstrapShiroModule(getServletContext())); 
    //This allows Shiro AOP Annotations http://shiro.apache.org/java-authorization-guide.html 
    install(new ShiroAnnotationsModule()); 

    Map<String, String> params = new HashMap<String, String>(); 
    params.put(PackagesResourceConfig.PROPERTY_PACKAGES, propertyPackages); 
    //if you had a Persistence Service like JPA Unit of Work you would need to add this PersistFilter also. 
    //filter("/*").through(PersistFilter.class); 
    //if you had a ShiroWebModule installed above you would need to add this GuiceShiroFilter also. 
    filter("/*").through(GuiceShiroFilter.class); 
    serve("/rest/*").with(GuiceContainer.class, params); 

} 
} 

С уважением

+0

Вы можете проверить образец проекта здесь [https: // GitHub. ком/pabiagioli/сиро-Guice-Джерси-самозагрузка] (https://github.com/pabiagioli/shiro-guice-jersey-bootstrap) – pampanet