系統采用jeeplus框架(ssm+redis+shiro+mongodb+redis),默認是做了JSP未做前后端分離,由於業務需要已經多終端使用的需求(H5、小程序等),需要實現前后端分離。但是由於需要同時保留原版的未做前后端分離的UI 和新版做了前后端分離的UI,所以采用單獨提出一套接口做封裝供前端VUE使用。
原先使用時有一個業務場景及客戶可以通過其它系統跳轉到我們系統不需要登錄,但是由於是其它客戶系統不好做SSO加上工期緊,我們這次采用客戶系統在登錄前先發送一次請求同步用戶信息到我們系統,然后我們進行模擬登錄成功后產生一個token返回客戶系統,系統拿到token后再次調用登錄接口,我們系統驗證token有效后完成用戶登錄。
在前后端分離的框架前端采用了ant design vue版本,前端代碼使用nginx做服務器,當客戶系統需要登錄時,有系統驗證用戶信息然后重定向到vue前端服務。遇到的問題是,當從后端tomcat容器重定向到nginx中,該死的url被添加了jessionid參數導致無法識別,顯示404,返回參數如下:
http://demo.zzxes.com.cn/ems/#/;JSESSIONID=46ded843b141471c930d95cac006e3d9#/?expoid=7e37cf45f131428ab6b6ed0dcc3f02d4&excompanyType=2
vue router 默認把#后面的參數當了路由地址,所以無法訪問,於是開始漫長的旅程。
方案一:
既然是路由的問題,第一想法是把默認的HASH模式修改為HISTORY模式,於是得到一下返回結構:
http://demo.zzxes.com.cn/ems/;JSESSIONID=46ded843b141471c930d95cac006e3d9#/?expoid=7e37cf45f131428ab6b6ed0dcc3f02d4&excompanyType=2
#的路由問題解決了,但是jessionid又被當成了請求地址,一樣無法訪問404,該死的404,方案一失敗。
方案二:
有沒有辦法能把中間的那一坨jessionid去掉呢?這樣就解決了問題了嗎。通過百度、google終於發現nginx有rewrite這功能,於是修改配置文件,增加重寫配置。
rewrite ^(.*);JSESSIONID)(.*)$ $request_uri/ems/?$args redirect;
reload nginx,測試成功,方案二可行。
遺留問題,不確定方案二去掉jessionid是否會有其他隱藏問題,只能發現了在解決了。