在使用filter做权限管理限制访问时,经常是在数据可以正确返回时,在后台日志中却有这个异常抛出,这个现象让人不禁想去一探究竟。
我要做的是在一个filter中拦截所有的请求,并且根据拿到的请求中的参数去作相应的判断处理,如果不通过,则直接在filter中返回信息给前台,如果处理通过,则通过调用filter链的chain.doFilter()将请求转发给下一个filter(如果没有下一个过滤器,则为请求的资源)。这个异常恰恰就发生在url被拦截时向前台返回数据的时候。
在拦截url向前端返回数据时,需要用到response对象向页面输入,这里使用的是:printWriter对象的write()方法,向前台传输数据(可以在ajax的回调函数种获取到传过去的数据),异常显示就发生在返回数据这一行。
在网上搜索资料显示,这个异常发生都是由于在一次请求中多次调用输出流时产生的。
解决方案:确保在所有可能返回数据的情况中,每一种情况只取获取一次输出流(printWriter或者servletOutputStream,如果获取第二次,则会抛出这个异常。