关于本节代码中的几个疑惑,希望老师能帮助解答一下

关于本节代码中的几个疑惑,希望老师能帮助解答一下

这段代码还是不太理解,其中的HttpServletResponseWrapper是如何使用的,我网上都找不到跟这类似的用,还有这里的PrintWriter  ,最后为什么还要out.flush()

boolean adminRole = userService.checkAdminRole(currentUser);
if (adminRole) {
filterChain.doFilter(servletRequest, servletResponse);
} else {
PrintWriter out = new HttpServletResponseWrapper(
(HttpServletResponse) servletResponse).getWriter();
   out.write("{\n"
           + "    \"status\": 10009,\n"
           + "    \"msg\": \"NEED_ADMIN\",\n"
           + "    \"data\": null\n"
           + "}");
   out.flush();
   out.close();
}


正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,HttpServletRequestWrapper和HttpServletResponseWrapper是对HttpServletRequest和HttpServletResponse的包装。可以在请求执行前拦截请求,请求响应前对拦截响应,进行处理等。

比如使用HttpServletRequestWrapper对请求拦截,可以过滤一些敏感词汇。使用HttpServletResponseWrapper对响应拦截,修改响应内容等。

在之前并没有讲过,只是在这里使用。

同学可以参考一下下边同学提供的链接,看一下HttpServletRequestWrapper的用法。

祝:学习愉快~

好帮手慕阿满 2020-11-05 17:44:37

同学你好,使用 PrintWriter out = servletResponse.getWriter();也是可以的。使用ServletResponse和HttpServletResponseWrapper的区别是:HttpServletResponseWrapper可以在response输出页面内容之前,进行页面内容的过滤等操作。

祝:学习愉快~


  • 提问者 慕前端2370429 #1
    那请问这些页面内容过滤操作指的是什么呢?这些老师好像没讲过,我网上也没找到
    2020-11-05 19:19:48
  • 我会看星星 回复 提问者 慕前端2370429 #2
    可以看一下这个博客:https://www.cnblogs.com/sharpest/p/5669495.html
    2020-11-05 19:34:32
好帮手慕阿满 2020-11-04 14:57:27

同学你好,在过滤器Filter中,改变现有的访问路径时,使用HttpServletResponseWrapper。

HttpServletResponseWrapper构造方法中,需要传入一个ServletResponse类型对象,调用getWriter()方法时,返回值类型是PrintWriter,如:

http://img1.sycdn.imooc.com//climg/5fa24dde09eb3cd712300573.jpg


out.flush()是清空缓存区,不需要等缓存区满即可将数据写入或读取。
  • 提问者 慕前端2370429 #1
    if (adminRole) { filterChain.doFilter(servletRequest, servletResponse); } else { // PrintWriter out = new HttpServletResponseWrapper( // (HttpServletResponse) servletResponse).getWriter(); PrintWriter out = servletResponse.getWriter(); out.write("{\n" + " \"status\": 10009,\n" + " \"msg\": \"NEED_ADMIN\",\n" + " \"data\": null\n" + "}"); // out.flush(); // out.close(); } servletResponse对象本身也有getWriter()这个方法,改成上面这段代码跑好像也没什么问题,为什么要非要去用HttpServletResponseWrapper这个很不常见的对象呢?
    2020-11-05 14:49:08
  • 提问者 慕前端2370429 #2
    这里代码看不太清,我重新提问一下吧
    2020-11-05 14:51:09
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师