【问题标题】:ContainerRequestFilter JBoss AS 7.1.1 RestEasy 3.0.6.FinalContainerRequestFilter JBoss AS 7.1.1 RestEasy 3.0.6.Final
【发布时间】:2014-03-12 18:15:04
【问题描述】:

我正在尝试设置请求过滤器,因为我想在调用我的逻辑之前检查一些 http 标头信息。不幸的是,我的过滤器永远不会在 JBoss AS7.1.1 中被调用。我已经尝试将 RestEasy 实现(模块)更新到 3.0.6,如​​ RestEasy 文档中所述。它说您只需要替换新实现 zip 文件提供的目录,我就这样做了。 AS 启动时没有任何错误,但行为没有任何变化。每个请求都不会被拦截。我从一个更复杂的示例中提取了这段代码,但即使是这个简单的东西也不起作用:

Filter.java

import java.io.IOException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.ext.Provider;

@Provider
@Secured
public class SecurityFilter implements ContainerRequestFilter {

public void filter(ContainerRequestContext crc) throws IOException {
    throw new IllegalStateException("Not in my house");
}
}

ItemsResource.java

import javax.ws.rs.Path;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;

@Path("/Items")
public class ItemsResource {

@GET
@Produces("application/json")
@Secured
public String getJson() {
    return "{\"id:\" \"1\"}";
}
}

ApplicationConfig.java

@javax.ws.rs.ApplicationPath("rest")
public class ApplicationConfig extends Application {    
}

Secured.java

import javax.ws.rs.NameBinding;

@NameBinding
public @interface Secured {}

如果我尝试使用没有注释的拦截器和资源,我不会更改任何内容。我希望所有请求都必须被拦截,但不会。我没有胶水怎么办。有人可以帮助我们提供一些建议吗?让我们添加一些额外的东西。我用 Wildfly(JBoss 8.0.0 Final)尝试了同样的事情。通过使用@NameBinding 和应用自定义注释进行拦截也不起作用,但如果我不使用注释而只是用@Provider 注释拦截器,我的所有请求都会被拦截。我必须迁移到 Wildfly 还是什么?

【问题讨论】:

标签: java rest jboss resteasy interceptor


【解决方案1】:

我们遇到了同样的问题。 我们使用 3.0.8.Final 版本的 RESTeasy 和 POM 依赖项。
同时使用 zip 文件 resteasy-jaxrs-3.0.7.Final 的内容更新 JBOSS (EAp 6.1) 的模块>。
唯一的区别是我们使用的过滤器:

@Provider @PreMatching
@Precedence("SECURITY")
public class SecurityInterceptor implements ContainerRequestFilter{
@Override
public void filter(ContainerRequestContext arg0) throws IOException {
    ...
    }
}

另外我们还需要在web.xml中手动注册Providers

<context-param>
    <param-name>resteasy.providers</param-name>
    <param-value>com.neology.rest.SecurityInterceptor</param-value>
</context-param>

我们遇到的其他问题是 Spring 集成。
首先是验证*Listeners

顺序
<!-- RESTeasy Listener 1st -->
<listener>
    <listener-class>
    org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
    </listener-class>
</listener>
<!-- Spring Listener 2nd -->
<listener>
    <listener-class>
    org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>


还请检查您的安全过滤器链。如果您已经配置了类似/rest/* 的rest servlet 映射,您需要让Spring不过滤 REST 服务。我们在 Spring xml 配置中使用这个:

<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<mvc:resources mapping="/rest/**" location="/rest/" /> 

希望这会有所帮助!

【讨论】:

  • 谢谢!帮助我使用 JBoss AS 7.1.1 配置了 ContainerRequestFilter。将 RestEASY 升级到 3.0.5 版后,它工作了。首先,我尝试将 RestEASY 升级到 3.6.3 版本,但没有成功。
【解决方案2】:

你可以使用 Resteasy PreProcessInterceptor:

import org.jboss.resteasy.annotations.interception.ServerInterceptor;
import org.jboss.resteasy.spi.interception.PreProcessInterceptor;
import javax.ws.rs.ext.Provider;

@Provider
@ServerInterceptor
public class SecurityInterceptor implements PreProcessInterceptor {

    @Override
    public ServerResponse preProcess(HttpRequest request, ResourceMethod method) throws Failure, WebApplicationException {
        if (/* Check if a user is currently authenticated */) {
            // no current authenticated user: throw exception
            throw new NotAuthenticatedException();
        }
        return null; // = continue without interrupting
    }
}

【讨论】:

  • PreProcessInterceptor 已弃用
【解决方案3】:

您的问题已经提到: Match Filter with specific Method through NameBinding on RESTeasy

您需要删除 @PreMatching 并确保在运行时保留您的 Secured 注释 (Retention = RUNTIME)。

【讨论】:

    【解决方案4】:

    在你的 META-INF/services 下添加一个 Provider 文件,比如:/META-INF/services/javax.ws.rs.ext.Providers , javax.ws.rs.ext.Providers 是一个文件,内容是您的过滤器路径如下:com.hujiang.foe.instalment.liquidation.biz.impl.account.filter.ContextCleanFilter

    【讨论】:

      猜你喜欢
      • 2013-10-31
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 2013-01-20
      相关资源
      最近更新 更多