后端使用权限控制框架(shiro)做安全管理
前端登录后访问shiro本身做拦截,导致访问接口失败
解决办法:自定义sessionid拦截器做统一处理
方法如下

自定义sessionManager


可以获取到当前登录人的sessionId从而得到登录人是谁

后台统一处理异常类


跨域解决方案
在 CORS 协议中,前端如果需要每次携带 cookie,就得把 withCredentials 设置成 true。所以在开发阶段我将配置类的 Access-Control-Allow-Origin 设置成 *,Access-Control-Allow-Credentials 设置成 true。但是在遇到 PUT 方法的接口(非预检请求)时,由于 options 类型的预检请求不带 cookie 所以被拦截在外。非简单请求
请求分为非简单请求和简单请求,其中预检请求就是导致我们联调发生的问题的原因。非简单请求是那种对服务器有特殊要求的请求,比如请求方法是 PUT 或 DELETE,或者 Content-Type 字段的类型是 application/json。非简单请求的 CORS 请求,会在正式通信之前,增加一次 HTTP 查询请求,称为"预检"请求(preflight)。浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些 HTTP 动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的 XMLHttpRequest 请求,否则就报错。当请求方法是 PUT 或 DELETE,或者 Content-Type 字段的类型是 application/json 就会触发询问服务器的回应,要求服务器确认可以这样请求解决方法
我们将需要预检请求的方法 "OPTIONS".equals(request.getMethod()) 放行,同时把 Access-Control-Allow-Headers 和 Access-Control-Allow-Origin 设置成请求的 HTTP 头信息,这样可以保证都放行。实际的配置就是如下: