shiro中获取不到session

  |   0 评论   |   244 浏览

背景

今天在改一个老的管理端,发现后台怎么也登录不了,一直报程序异常,查看后台日志:
image.png
发现是空指针,查看报错的那行代码,是去获取图形验证码的时候没有获取到。

分析

shiro中是会把sessionId放到cookie中,这样登录的时候会获取到之前的验证码进行验证,但是为什么没有获取到呢?看了下后台的代码,发现没啥问题,在查看前端的代码,也没发现问题,后面通过浏览器调试工具,查看JSESSIONID的值,发现获取验证码的sessionId和登录时传过来的sessionId不一样,这就可以解释为什么登录的时候获取不到验证码了,那么问题来了,为什么会不一样呢?查看cookie的信息,发现cookie的path是/xxx,但是我的服务访问的时候是没有上下文的。
image.png

解决

因为项目部署的时候是有上下文的,因为是老系统,前端是不能加上下文的,不然会有问题,然后在nginx那边做了处理,把上下文去掉,估计是这个引起的,所以修改nginx的配置,如下:

location / {
    proxy_pass http://xxx.com/xxx/;
    proxy_set_header  Host $proxy_host;
    proxy_set_header   X-Real-IP  $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Cookie $http_cookie;
    proxy_cookie_path /xxx /;
}

image.png
这样就可以成功登陆了。

也可以关注我的公众号:程序之声
图片
关注公众号,领取更多资源

本文为博主原创文章,未经博主允许不得转载。

评论

发表评论