Spring Filter在Jersey Filter中不起作用 - @InjectParam在jersey2中等效

时间:2016-03-02 07:46:10

标签: spring dependency-injection jersey-2.0

我正在尝试使用弹簧注射在Jersey-Filter中注入一个物体。

如果我尝试 @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)

如果我尝试使用在泽西岛1.x中定义的 @InjectParam ,但是我使用的是没有找到此注释的Jersey 2.17。

知道如何在平针织过滤器中进行弹簧注射吗?

该例外是什么意思?

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

1 个答案:

答案 0 :(得分:0)

更新修改 另外,您可以提供构造函数注入。 Jersey的构造函数注入在Filter中而不是Field Injections中为我工作

旧:

我是通过在过滤器中注入 javax.servlet.ServletContext 并使用它来使用 WebApplicationContextUtils

来获取beanId来实现的。
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>

这很有效。 但是我没有注入,而是明确地加载了依赖项。 有没有更好的方法呢?