一个用Spring security做的权限系统,页面通过ajax来调用后台方法获取当前用户信息,之前一直用的好好的,今天打开一看发现一直获取不了当前登录的用户信息,即后台用SecurityContextHolder.getContext() .getAuthentication().getName();
获得的一直是anonymousUser,而不是当前登录的用户名,这就让我很不解,明明代码都没动过,怎么突然不行了,然后我就试着直接在浏览器输入后台接口地址发现就正常!!!
因为我是通过cookie和session的方式来记录当前用户的,所以就觉得可能是cookie的问题,然后F12打开一看我ajax请求的时候居然没有带cookie,但是我直接在浏览器上请求的时候却有带上cookie(下图)
所以我肯定这就是问题的关键,但为什么ajax请求没有带上cookie呢,然后去查了一下资料,原来ajax默认只会带上同源的cookie,如果只是这样还没什么,重点是localhost和本机的Ip地址(我的是192.168.32.254)不是一个域,因为我在浏览器输入网址打的是localhost:8761/page(也就是说当前域是localhost:8761),但为ajax的请求地址是写192.168.32.254:8761,所以ajax请求就没带上localhost:8761下的cookie
补充一下:当然不仅ajax,比如直接在浏览器上输入地址或者通过表单提交都是默认只带上同源的cookie