![](/img/trans.png)
[英]JAX-RS: Custom class object no injected into a ContainerRequestFilter
[英]JAX-RS - Creating filter extending ContainerRequestFilter
我的TomEE Plume 7.0.2存在問題。
我用這種方式創建了一個過濾器:
package com.gfp.rest.providers;
import java.io.IOException;
import javax.annotation.Priority;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.PreMatching;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.Provider;
@PreMatching
@Provider
@Priority(value = 1)
public class AuthenticationFilter implements ContainerRequestFilter
{
public AuthenticationFilter()
{
System.out.println("AuthenticationFilter.AuthenticationFilter()");
}
@Override
public void filter(ContainerRequestContext requestContext) throws IOException
{
System.out.println("AuthenticationFilter.filter()");
String token = requestContext.getHeaderString("token");
ResponseBuilder responseBuilder = null;
Response response = null;
// check if token is empty
if (token.isEmpty()) {
responseBuilder = Response.serverError();
response = responseBuilder.status(Status.UNAUTHORIZED).build();
requestContext.abortWith(response);
}
}
}
這是我的Rest應用程序:
package com.gfp.rest;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("api/v1")
public class RestApplication extends Application
{
}
問題是:過濾器似乎沒有被調用。 我已閱讀了大量文檔和許多其他帖子,我找不到任何解決方案。 有什么特別的東西我錯過了嗎?
非常感謝 !
嘗試這個
package com.gfp.rest;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("api/v1")
public class RestApplication extends Application
{
public Set<Class<?>> getClasses() {
return getRestClasses();
}
private Set<Class<?>> getRestClasses() {
Set<Class<?>> resources = new java.util.HashSet<Class<?>>();
resources.add(AuthenticationFilter.class);
return resources;
}
}
此外,您可能需要使用org.glassfish.jersey.servlet.ServletContainer作為web.xml中的servlet容器,用於Jersey 2.x.
它取決於你的配置(我認為是openejb-jar.xml和系統屬性),因為它應該開箱即用( https://github.com/apache/tomee/blob/41cb392c6e3dc63d6792eae88e90c33743255212/server/openejb-cxf-rs/src /test/java/org/apache/openejb/server/cxf/rs/CDIProviderContainerRequestFilterTest.java不做任何事情)
另一種方法是在Rahul的答案中注冊類中的過濾器(但是請不要做任何與球衣相關的事情,因為TomEE不使用球衣它會失敗而只是添加一團糟)或者只是在openejb-jar.xml中配置它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.