在Jersey网站上的入门指南之后:

我执行了以下构建命令:

$mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2 \
-DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \
-DgroupId=com.example -DartifactId=simple-service -Dpackage=com.example \
-DarchetypeVersion=2.2

然后我按照教程进行操作

https://jersey.java.net/documentation/latest/filters-and-interceptors.html#d0e6783

添加自定义ContainerResponseFilter:

@NameBinding
@Retention(RetentionPolicy.RUNTIME)
static @interface CORSBinding {}

@Provider
@Priority(Priorities.HEADER_DECORATOR)
@CORSBinding
static class CrossDomainFilter implements ContainerResponseFilter {
    @Override
    public void filter(ContainerRequestContext creq,ContainerResponseContext cres) {
        Logger.getLogger("com.example").log( Level.INFO,"before: {0}",cres.getHeaders());
        cres.getHeaders().add("Access-Control-Allow-Origin","*");
        cres.getHeaders().add("Access-Control-Allow-Headers","origin,content-type,accept,authorization");
        cres.getHeaders().add("Access-Control-Allow-Credentials","true");
        cres.getHeaders().add("Access-Control-Allow-Methods","GET,POST,PUT,DELETE,OPTIONS,HEAD");
        cres.getHeaders().add("Access-Control-Max-Age","1209600");
        Logger.getLogger("com.example").log( Level.INFO,"after: {0}",cres.getHeaders());
    }
}

@Provider
static class MyResponseFilter implements ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext requestContext,ContainerResponseContext responseContext) throws IOException {
        System.out.println("MyResponseFilter.postFilter() enter");
        responseContext.setEntity(
                responseContext.getEntity() + ":" + getClass().getSimpleName(),null,MediaType.TEXT_PLAIN_TYPE);
        System.out.println("MyResponseFilter.postFilter() exit");
    }
}

...
@GET
@Produces(MediaType.TEXT_PLAIN)
@CORSBinding
public String helloWorld() {
    return "hello world";
}

我尝试使用命名绑定和动态绑定注册此过滤器,没有任何作用.

为了便于重现,我还尝试了官方资源的一个例子:

https://github.com/jersey/jersey/tree/2.2/examples/exception-mapping

同样的问题:自定义过滤器不会被执行.

这是一个灰熊问题吗?

解决方法

事实证明,您必须手动注册自定义类 – 如:
rc.register(com.dummy.mypackage.CORSResponseFilter.class);

完整示例:

/**
 * Main class.
 *
 */
public class Main {
    // Base URI the Grizzly HTTP server will listen on
    public static final String BASE_URI = "http://192.168.1.34:8080/myapp/";

    /**
     * Starts Grizzly HTTP server exposing JAX-RS resources defined in this application.
     * @return Grizzly HTTP server.
     */
    public static HttpServer startServer() {
        // create a resource config that scans for JAX-RS resources and in com.example package
        final ResourceConfig rc = new ResourceConfig().packages("com.dummy.mypackage");

        //NEW: register custom ResponseFilter
        rc.register(com.dummy.mypackage.CORSResponseFilter.class);

        // Register Jackson JSON
        rc.packages("org.glassfish.jersey.examples.jackson").register(JacksonFeature.class);

        // create and start a new instance of grizzly http server
        // exposing the Jersey application at BASE_URI
        return GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI),rc);
    }
    ...
}

java – jersey 2.2:ContainerResponseFilter和ContainerRequestFilter永远不会被执行的更多相关文章

  1. 尝试更改Bool属性时,ios – EXC_BAD_ACCESS错误

    我正在尝试更改Bool属性并且收到一个EXC_BAD_ACCESS错误.我正在使用XCode6和Swift.note属性保存不错,但已完成的属性会抛出EXC_BAD_ACCESS错误改变属性程序解决方法有同样的问题,解决方案确实是在@NSManaged属性中使用NSNumber.此外,您可以定义一个计算的Bool属性,以便您可以使用业务逻辑中的标量布尔值,而不能使用NSNumber.

  2. 微信三方登录相关(Swift)

    微信登录条件1.微信开放平台注册并认证成功2.相关应用的微信的APPID和secret3.遵循微信代理WXApiDelegate使用处编写相关登录代码WXApi.registerappletreq=SendAuthReq.init()req.scope="snsapi_userinfo"req.state="wulianwang"WXApi.send在回调方法中处理相关业务funconResp(_resp:BaseResp!,options:.mutableContainers)/**正确时返回的JSON

  3. Swift POST请求不起作用

    我正在尝试使用Swift发布帖子请求.我的目标是将accessstokenfacebook发布到服务器但不起作用.这是代码:答案如下:这样您可以使用POSTWeb服务:

  4. Swift 3.0字符串连接离开“可选”

    “随你”有人见过类似的东西?

  5. 如何知道Android手机中的位置区号和手机ID

    我想知道SIM卡中保存的位置区号和小区ID.如何在Android手机中获取位置区号和小区ID.最好的祝福.解决方法不要忘记设置ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION,否则您将获得SecurityExceptions.例如,将以下内容添加到应用清单中的元素:

  6. Android Recycle View LogCat:找不到方法

    我使用Android支持库中的RecyclerView.在使用Android4.1.2的三星galaxyS2上运行时,一切正常但在Logcat中我看到了消息:我应该担心这个消息吗?

  7. 脚本中出现 window.open() access is denied - 拒绝访问 情况一则及分析

    昨天把blog页面另存在,在本地调试和改blog皮肤。包括把上面的function放在另外一个页面上运行,依然是正常,并把这个function单独改成了window.open还是拒绝访问。never-online'sTechBlogInCSDN-JS&DHTMLfunctionaddEvent{if{o.attachEvent;}else{o.addEventListener;}}functionfnRunHtmlCode{varwnd=window.open;wnd.document.open;wnd.

  8. php获取微信基础接口凭证Access_token

    这篇文章主要为大家详细介绍了php获取微信基础接口凭证Access_token,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. 使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)

    我们今天为大家介绍的PHP连接数据库的方法包括在MYSQL数据库、ACCESS数据库、MS SQL数据库和Oracle数据库中实现

  10. 利用python分析access日志的方法

    最近在自学python,光看是不行的,还是要多实操的。这就是一个写给自己的小小工具。主要功能是,便利日志文件夹下的文件,根据设定的关键字查找是否有web攻击行为。有需要的朋友们下面来一起看看吧。

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部