用jersey2搭建restful平台时遇到的问题

霸气de小男生 提交于 2020-01-07 08:18:50

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

前几天用jersey2搭建了一个restful平台,今天在测试的时候发现一个问题,如果一个没有权限的用户访问了限制资源,那么正确的返回结果应该为401。问题就在这里发生了,我写了一个测试用例,第一次访问的时候返回401,再次请求时就成了200,往后再怎么试都是200,除非重启应用。看看了日志发现报错了:

An I/O error has occurred while writing a response message entity to the container output stream.
! java.lang.IllegalStateException: The output stream has already been closed.

看到了,当服务端往请求的客户端通道中返回数据时,发现客户端的通道已经关闭了。哦,明白了,看看了代码,发现问题的所以,如下:

final Response ACCESS_DENIED = Response.status(Response.Status.UNAUTHORIZED).entity("无权限访问!").build();

起初这段代码是做filter的类变量而使用的,也就是说定义了一个Response重复在使用,这样做是不对的,随后把改成了局部变量,再次验证问题解决了。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!