春季注射在泽西过滤器不工作 - @InjectParam等效泽西2

问题描述:

我想注入一个对象在泽西过滤器使用弹簧注射。春季注射在泽西过滤器不工作 - @InjectParam等效泽西2

如果我尝试@Inject方法,那么我结束了一个异常

SEVERE: StandardWrapper.Throwable 
MultiException stack 1 of 2 
java.lang.IllegalStateException: Could not find an active context for org.jvnet.hk2.spring.bridge.api.SpringScope 
     at org.jvnet.hk2.internal.ServiceLocatorImpl._resolveContext(ServiceLocatorImpl.java:2058) 
     at org.jvnet.hk2.internal.ServiceLocatorImpl.access$000(ServiceLocatorImpl.java:120) 
     at org.jvnet.hk2.internal.ServiceLocatorImpl$2.compute(ServiceLocatorImpl.java:186) 
     at org.jvnet.hk2.internal.ServiceLocatorImpl$2.compute(ServiceLocatorImpl.java:182) 

如果我尝试使用@InjectParam,它在新泽西州1.x中定义的,但是我很使用泽西岛2.17其中没有找到该注释。

任何想法如何在泽西过滤器执行这种弹簧注射?

这个例外是什么意思?

Could not find an active context for org.jvnet.hk2.spring.bridge.api.SpringScope

+0

它看起来像我在初始时春季桥没有被正确初始化。我不确定泽西岛是如何做到这一点的,但你可以在这里看到更多关于spring/hk2桥梁的信息:https://hk2.java.net/2.5.0-b03/spring-bridge.html – jwells131313

更新编辑: 另外,你可以提供一个构造函数注入。新泽西州的构造函数注入在过滤器的,而不是现场注射

老为我工作:

我实现了这个通过注入javax.servlet.ServletContext在过滤器内使用,使用WebApplicationContextUtils得到beanIds

public class LoginFilter implements ContainerRequestFilter { 

    @Context private HttpServletRequest servletRequest; 

    @Context private HttpServletResponse servletResponse; 

    @Context private ServletContext servletContext; 

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 

     try { 

      WebApplicationContext springContext = 
        WebApplicationContextUtils.getWebApplicationContext(servletContext); 

      CookieAuthenticator  cookieAuthenticator = springContext.getBean(CookieAuthenticator.class); 

      LoginInterceptorHelper loginInterceptorHelper = springContext.getBean(LoginInterceptorHelper.class); 

      HttpSession session = request.getSession(true); 

      UserSummary user = (UserSummary) session.getAttribute(WebConstants.USER_DETAIL); 

而且通过包含一个弹簧侦听器,所以弹簧初始化首先发生。

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

This works。 但是,而不是注入我明确加载依赖关系。 有没有更好的方法来做到这一点?