Spring boot首页加载缓存问题

    在项目使用测试过程中,发现有时用户展示不出来,而且不是必现,让人头痛。自己测试通过不断刷新页面,的确偶尔出现用户信息展示不出来问题,通过F12准备定位一下是页面请求加载情况,发现问题又不出现了。。。按正常如果是代码问题,应该不会出现这样的情况。那怎么出现这个问题的呢?

    先梳理一下用户信息获取是怎么处理,用户信息请求是通过前台调用后台的Restful接口获取的,处理方式很简单,直接调用session.getAttribute("user")返回给前台的。用户信息为空,说明这个Session中没有user信息。

    而这个user信息是ZUUL中做了一个请求登录过滤器,即校验用户请求是否已经登录,如果没有登录,则跳转到SSO登录页面,登录成功以后,将用户信息设置到SESSION中。

    按正常的请求处理逻辑应该是只要用户登录了,SESSION中肯定会有用户信息。Why取不到呢???

   再冷静分析一下,应该请求哪个页面的时候SESSION应该放入的呢?一般Spring boot会加载index.html页面的时候,即请求根路径的时候,第一次应用请求的时候放入的。在Spring boot第一请求路径是这样的:

    {请求协议(http|https)}://{域名或IP端口}/{context-path}/

    如http://localhost:21000/business/

    这是spring boot自动会将工程resources下面static或public、resources目录(这个路径支持spring.resources.static-locations配置)下面的index.html静态页面加载返回给前台,作为欢迎页面,应用的起始页面。

    这个index页面正常加载啦,为什么没有SESSION中的用户没有设置呢???

    突然想到了页面缓存问题,难道index页面被缓存了???

    果然,在F12的调试的时候,disable cache了,故每次刷新页面都不会出现,通过将其关闭问题就出现了。

    

 既然问题原因找到了,那就解决问题吧,怎么屏蔽掉请求缓存。

 刚开始准备通过在index.html页面中设置cache-control,

 <meta http-equiv="Cache-Control" content="no-cache,max-age=0" />

发现其根本不起作用,初步估计应该是Spring boot默认加载index.html方式导致的吧。

然后尝试Spring boot resources cache设置,

这种方式也不行,目前还没有想清楚原因,前台请求响应的确设置了max-age了。

最终通过NGINX在location中配置expires=0解决了,由于NGINX是全局的,最好根据不同的location设置不同的expires,像JS、PNG等不经常变换的请求设置稍微长一点的expires时间,提升系统加载性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值