【推荐】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重复在使用,这样做是不对的,随后把改成了局部变量,再次验证问题解决了。
来源:oschina
链接:https://my.oschina.net/u/79159/blog/730662