繁体   English   中英

在没有web.xml的情况下在Jersey中使用ContainerRequestFilter

[英]Use ContainerRequestFilter in Jersey without web.xml

我试图拦截在Glassfish内运行的泽西岛的请求。

我创建了ContainerRequestFilter的实现

package mycustom.api.rest.security;

@Provider
public class SecurityProvider implements ContainerRequestFilter {
  @Override
  public ContainerRequest filter(ContainerRequest request) {
    return request;
  }
}

我的应用程序是使用PackagesResourceConfig的子类启动的。

当Glassfish开始时,球衣找到我的提供者:

INFO: Provider classes found:
  class mycustom.rest.security.SecurityProvider

但它永远不会遇到filter方法。 我错过了什么?

其他一切似乎都运转良好。 我添加了几个ContextResolver提供程序来执行JSON映射,它们工作正常。 请求打我的资源很好,它只是从来没有经过过滤器。

我不认为容器过滤器作为提供者加载。 我认为你必须设置响应过滤器属性。 奇怪的是PackagesResourceConfig没有setProperty()但你可以重载getProperty()getProperties()

public Object getProperty(String propertyName) {
  if(propertyName.equals(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS)) {
    return new String[] {"mycustom.rest.security.SecurityProvider"};
  } else {
    return super.getProperty(propertyName);
  }
}

public Map<String,Object> getProperties() {
  propName = ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS;
  Map<String,Object> result = super.getProperties();
  result.put(propName,getProperty(propName));
  return result;
}

实际上,更仔细地阅读javadocs,似乎首选的方法是:

myConfig.getProperties().put(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS,
                              new String [] {"mycustom.rest.security.SecurityProvider"});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM