发表于: 2018-03-31 20:45:58

1 570


今天完成的事情:完成shiro项目的https服务器部署


基本部署和SSL获取可以看这位师兄的日报:

http://www.jnshu.com/daily/50397?dailyType=others&total=118&page=32&uid=14237&sort=0&orderBy=3


我下面主要说一下我遇到的一些问题,特别是shiro框架的https部署方面。


问题一:非常诡异的一个现象,动静分离后,某些JS文件(静态文件)无法读取的现象..

当然,路径什么的弱智问题我肯定不会拿出来丢人现眼。这个问题诡异其实非常诡异:一个目录下有四个js文件,

其中,123.js和test.js直接通过url,nginx root路径下都能读取到,而同目录(服务器下/data/static)的其余两个js文件读取不了!更诡异的是,这两个文件改名后,就能正常获取到了,前后内容一模一样!


后来排查出原因,是由于nginx的静态文件缓存的原因:

之前我有一次写错路径,那两个js文件给我返了404错误页面。然后nginx就给他们加到缓存里面了,下次我正确输入url,服务器也成功解析了,但是从缓存里面返回给我的是404错误页面....



问题二:shiro框架登录失败,观察f12前端控制台,发现每一次刷新都会改变shiro网络应用的cookie值。


这个问题一度搞得我非常恼火,搞得缓存都炸了,缓存疯狂报错,只能kill -9 后重启flushall解决。网上关于这方面的资源实在不多,后来总算找到一篇相关的资源:

https://www.cnblogs.com/hz-cww/p/6956740.html

然而我按照他说的,web.xml里面<distributable/>打了,tomcat的server.xml改注释的也注释了,nginx该配置的也配置了,依旧没有什么卵用。仔细一看:

一下子无语啦,这位兄弟最后还是选择了壮士断腕的方法,通过舍弃功能的方法强行跑通代码......我学了这么久shiro,自然不甘心,终于经过我的层层分析,找出了问题所在:

之前没有出问题是因为我们用的是servlet自带的session,现在被托管给了shiro,名字和生成方式都变了,自然也要做出额外的配置。因为本地我跑是没有任何问题的,所以我把注意力集中到了nginx上面。啃了半天英文,发现原来是这个功能没有开的原因:

加了以后,清了redis缓存,成功跑通


问题三:关于shiro未登录重定向的问题

按道理来说,下面的这个方法:

跳转的url应该是:

然而,实际发生的情况却是重定向到了首页:

打开F12,发现浏览器进行了两次302和一次301跳转,按照顺序分别是:

1.受登录保护的url(https)

2.登录页面(http)

3.网站顶级url(https)

4.网站首页(https)


问题就出现在shiro框架重定向的那个地址上面!因为填的是相对路径,所以可能他默认搞成http了....然后我是做了http自动跳转到https首页的功能的,就会发生上述情况。


那怎么解决呢?


这里我没有在shiro里面改成绝对路径(考虑到兼容性问题),而是在nginx里面修改配置,改成这样子就行了:

禁止http的直接Ip访问,只能通过域名,并且自动转https,uri不变。

注意,此外一定要开启下面的功能!

不然就给你定位到上面的tomcatserver的url去:

这样子问题就解决了:


最后再贴一下小知识点:



https禁止ip直接访问需要这样子弄,http的那一套不行。至于HSTS也是很重要的一个知识点,下次有空专门总结一下~



明天计划的事情:继续学习cas


遇到的问题:如上所示,一堆问题,都已经解决


收获:熟悉了nginx的配置


返回列表 返回列表
评论

    分享到