spring security 和JWT的实现
晕死,发现网上所有的JWT和Spring Security的实现全都不一样,而且都很复杂,没有一个简单的交钥匙的解决方案。
因为我的springboot和node.js跑在不同的端口上,调用rest构成了跨域调用。
坑1:axios默认跨域提交的时候,要发送一个Options 命令来检查跨域CORS的情况,处理起来有点麻烦,为了不让axios发送Options,我们不能用application/json的方式,而是可以用qs.stringfy的方式以application/x-www-form-urlencoded, 注意Server端获取字段信息的时候需要用getParameter()方法,而不是获取body的方式。
坑2:attemptAuthentication方法里面为了让cors调用不失败,需要设置下面的header信息,否则axios会认为跨域调用调用失败。
res.setHeader("Access-Control-Allow-Origin", "*");//* or origin as u prefer
res.setHeader("Access-Control-Allow-Credentials", "true");
res.setHeader("Access-Control-Expose-Headers", "Authorization");
res.setHeader("Access-Control-Allow-Headers",
req.getHeader("Access-Control-Request-Headers"));
一个靠谱的demo 源码
https://github.com/nagyadam2092/jwt-spring-boot-vuejs-auth.git
关于跨域的问题,后来都是采用nginx的proxy添加header来实现的,但是用nginx代理实现的缺点是debug环境下无效.