1

我的 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);
        }
    }
}

这是我的休息申请:

    package com.gfp.rest;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("api/v1")
public class RestApplication extends Application
{
}

问题是:过滤器似乎没有被调用。我已经阅读了很多文档和许多其他帖子,但我找不到任何解决方案。有什么特别的东西我错过了吗?

非常感谢 !

4

2 回答 2

0

这取决于您的配置(我认为 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 中配置它。

于 2017-01-22T18:18:14.493 回答
0

尝试这个

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;    
    }
}

此外,对于 Jersey 2.x,您可能需要使用 org.glassfish.jersey.servlet.ServletContainer 作为 web.xml 中的 servlet 容器。

于 2017-01-17T08:33:57.910 回答