response.setheader无效的原因之一_response.setheader()无效-程序员宅基地

技术标签: java  response  

最近搭建架构的时候,使用了HandlerInterceptorAdapter,

在afterCompletion 或 postHandle中使用了response.setHeader("token", token); 

初衷是想在方法执行完成后,把新的jwt令牌返回给调用方。

但是实际返回中获取不到set的值。

 

原因是:response的header设置,要在缓冲区装入响应内容之前,http的协议是按照响应状态行、各响应头和响应正文的顺序输出的,后写的header就不生效了。所以在preHandle里写header就可以生效了的。

输出缓冲区:

1、  Servlet程序输出的HTTP消息的响应正文首先被写入到Servlet引擎提供的一个输出缓冲区中,直到输出缓冲区被填满或者Servlet程序已经写入了所有的响应内容,缓冲区中的内容才会被Servlet引擎发送到客户端。

2、  使用输出缓冲区后,Servlet引擎就可以将响应状态行、各响应头和响应正文严格按照HTTP消息的位置顺序进行调整后再输出到客户端。

3、  如果在提交响应到客户端时,输出缓冲区中已经装入了所有的响应内容,Servlet引擎将计算响应正文部分的大小并自动设置Content-Length头字段。

4、  如果在提交响应到客户端时,输出缓冲区中装入的内容只是全部响应内容的一部分, Servlet引擎将使用HTTP 1.1的chunked编码方式(通过设置Transfer-Encoding头字段来指定)传输响应内容。

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zjy105/article/details/83996059

智能推荐

JVM源码分析之堆外内存完全解读_jvn源码分析线程工作内存-程序员宅基地

文章浏览阅读223次。个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈概述广义的堆外内存说到堆外内存,那大家肯定想到堆内内存,这也是我们大家接触最多的,我们在jvm参数里通常设置-Xmx来指定我们的堆的最大值,不过这还不是我们理解的Java堆,-Xmx的值是新生代和老生代的和的最大值,我们在jvm参数里通常还会加一个参数-XX:MaxPermSize来指定持久代的最大值,那么我们认识..._jvn源码分析线程工作内存

springboot中返回值json中null转换空字符串_阿里的json转化怎么把null转为空字符串-程序员宅基地

文章浏览阅读2.4k次。在实际项目中,我们难免会遇到一些无值。当我们转JSON时,不希望这些null出现,比如我们期望所有的null在转JSON时都变成“”“”这种空字符串,那怎么做呢?Jackson中对null的处理 1 @Configuration 2 public class JacksonConfig { 3 @Bean 4 @Primary 5 @Condition..._阿里的json转化怎么把null转为空字符串

连登 GitHub TOP 榜,中国开发者在行动!_连登 技术-程序员宅基地

文章浏览阅读1.2w次,点赞86次,收藏87次。中国开发者对于疫情的整体关注程度及防护方向。_连登 技术

java计算机毕业设计教育辅导班信息网服务端源码+mysql数据库+系统+lw文档+部署-程序员宅基地

文章浏览阅读37次。java计算机毕业设计教育辅导班信息网服务端源码+mysql数据库+系统+lw文档+部署。springboot基于Vue.js的云医疗自助就诊平台的设计与实现。前端技术:Layui、HTML、CSS、JS、JQuery等技术。springboot颜如玉图书销售网站的设计与实现。springboot竞赛信息发布及组队系统。springboot郑财校园新闻管理系统。springboot校园任务发布系统。

对jupyter notebook运行时出现“The kernel appears to have died. It will restart automatically”的解决方案_用jupyternotebook训练模型总是the kernel appears to have d-程序员宅基地

文章浏览阅读1.6w次,点赞8次,收藏21次。1、前天在jupyter notebook 上运行tensorflow的代码时(主要是卷积神经网络,用小笔记本上的GPU),运行没多久,出现“The kernel appears to have died. It will restart automatically”。试了很多遍,一直都是这样。但是又运行之前的Tensorflow基础运算和全连接神经网络的程序,都可以运行,只有开始跑卷积神经网..._用jupyternotebook训练模型总是the kernel appears to have died. it will restar

redisson分布式锁组合spring事务解决锁被释放但事务还未被提交的问题_redis分布式锁释放了,业务还没处理完-程序员宅基地

文章浏览阅读2.6k次,点赞10次,收藏25次。定义的注解里面建议组合spring的Transactional注解 这样的话,使用者能够定义像传播特性、隔离级别等之类的属性,而不需要我们重新定义/**// 开启事务 如果不需要组合的话 可选择使用此注解 // 但需要稍微改一下后续的代码 // boolean transactional() default false;// 组合事务注解 最推荐 很方便 Transactional transactional();// 开启锁 boolean lock() default true;_redis分布式锁释放了,业务还没处理完

随便推点

k8s 控制器:Daemonset 和 Job_deamonset-程序员宅基地

文章浏览阅读10w+次,点赞2次,收藏6次。k8s Job_deamonset

html和vue XLSX.utils.json_to_sheet导出excel模板-程序员宅基地

文章浏览阅读3.9k次,点赞4次,收藏7次。html XLSX.utils.json_to_sheet导出excel模板若使用vue,设置按钮,调用函数,自己比葫画瓢,慢慢摸索把<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <m_xlsx.utils.json_to_sheet

centos 6.5 php nginx+mysql yum_CentOS 6.5 yum安装配置lnmp服务器(Nginx+PHP+MySQL)-程序员宅基地

文章浏览阅读82次。转载者语:原文标题:CentOS 6.2yum安装配置lnmp服务器(Nginx+PHP+MySQL)本人以CentOS6.5亲测成功.以下是原文.------------------------------------------------------------------------------------------------------------------------------..._centos nginx php mysql yum

[ARM-Linux开发]Linux下加载.ko驱动模块的两种方法:insmod与modprobe_trace32 如何load linux-arm 中的 ko 文件-程序员宅基地

文章浏览阅读3.2k次。假设要加载的驱动程序模块名为SHT21.ko加载驱动模块方法一: 进入SHT21.ko驱动模块文件所在的目录,然后直接 insmod SHT21.ko 即可方法二: 将SHT21.ko文件拷贝到/lib/module/#uname -r#/目录下,这里,#uname -r#意思是,在终端中输入 uname -r后显示的内核版本及名称,例如mini2440_trace32 如何load linux-arm 中的 ko 文件

OpenJudge-1.3.15:苹果和虫子_openjudge苹果和虫子-程序员宅基地

文章浏览阅读267次。OpenJudge-1.3.15:苹果和虫子_openjudge苹果和虫子

深入理解代理模式:静态代理与JDK动态代理_jdk 代理是静态代理-程序员宅基地

文章浏览阅读1.3w次,点赞32次,收藏140次。摘要:      代理模式为其他对象提供了一种代理以控制对这个对象的访问,具体实现包括两大类:静态代理和动态代理。Java动态代理机制的出现使得Java开发人员只需要简单地指定一组接口及委托类对象便能动态地获得代理类,并且其所生成的代理类在将所有的方法调用分派到委托对象上反射执行的同时,还可以对方法进行增强,这也正是Spring AOP的实现基础。通过阅读本文,读者将会对代理模式和Java动态..._jdk 代理是静态代理