SpringBoot2中使用Security整合JWT
运行起来后执行命令获取TOKEN
curl -H "Content-Type: application/json" -X POST -d '{"username":"admin","password":"123456"}' http://127.0.0.1:8889/login
就会得到一个JSON 包含TOKEN
{
"result": "....",
"message": "",
"status": 0
}
使用上面获取的TOKEN值去获取用户信息
curl -H "Content-Type: application/json" -H "Authorization: Bearer TOKEN值" http://127.0.0.1:8080/users
返回结果:
{
"result":["freewolf","tom","jerry"],
"message":"",
"status":0
}
则一切正常, 然后进行自定义的定制就行了, 整合数据库什么的
特别注意跨域问题
curl 和 postman rest客户端等工具是能够验证接口没有问题, 但是一旦在页面上使用ajax进行自定义headers就会发现发出的请求一直 是 403
$.ajax({
url: '/path/to/service',
method: 'GET | POST | PUT | DELETE',
headers: {
'Authorization': 'Bearer <jwt token>',
'some-other-header': 'some value'
}
})
.done(function(data){...})
.fail(function(jqXHR){...})
.always(function(){...})
这是因为:
由于JWT是基于JSON的, 所以前端的所有带TOKEN的请求都是会有两次请求的, 一次是预检请求,HTTP方法类型是OPTIONS,一次是真正的请求, 所以要在Security的设置里放行所有 OPTIONS 的请求,并且设置不进行认证
参考 : 跨域请求web api,如果headers传递数据,请求无响应。
是会先发起一个option来验证下,是否允许你真正的请求类型,如果通过才发起你真正的请求。所以api要同时允许options和你真正的请求类型。