一、问题描述:app的请求登录接口成功后,再次访问其他接口报错401
二、部署逻辑图:
三、排查过程:
1、使用nginx,模拟第三方代理:
2、我方nginx,监听8084端口, 直接用根目录接收:
3、postman模拟请求登录接口:
http://127.0.0.1:8085/firstproxy/apptest/api/login?username=aaa&password=abc
正常返回:
访问业务接口:
问题重现:正常登录后,访问业务接口报错401??!!
开始以为是nginx没有带上cookie,导致会话丢失,故在nginx日志增加$http_cookid
查看日志情况,cookie是有的:
再次比较两次服务端返回的cookie发现,会话路径不是/,而是/apptest/, 表明登录成功的会话路径是/apptest/,而再次请求的会话路径是 /,所以服务端认为你没有登录,报错401了。
四、解决:
第一种方法:
修改tomcat会话路径:在\conf\context.xml增加如下配置:默认用项目名称做会话路径,修改为/。
再次测试,可以正常返回:
此次登录接口的会话路径为/
第二种方法:
采用jar包方式部署,这种原理和第一种一样,亲测可以。
第三种方法:
修改nginx配置,增加如下行,则可以将/apptest的cookie输出到/上。
重启nginx
再次测试可以
再次查看登录接口返回的cookie,会话路径变为/,问题解决。
以上就是对登录后出现401问题的总结,不知道对你们有帮助没?
码字不易,记得点赞加关注哦!!
本文暂时没有评论,来添加一个吧(●'◡'●)