单点登陆逻辑
登录的业务流程:
拿到用户名密码,判断正确之后生成token,作为key和用户信息(value)一起保存到redis里面,然后把token返回出来在表现层再写入cookie里,就算登陆成功了
(redis还要设置过期时间)
判断登陆和取用户信息:
取出cookie里token,用它去redis里查询用户信息,如果存在就是没有过期即为登陆状态,同时返回用户信息
(redis需重置下过期时间)
jsonp跨域请求
通过token查询用户数据时
方案一:在Controller中取cookie中的token数据,调用sso服务查询用户信息。但是每加载一个商品就要查询一次,太繁琐。
方案二:当页面加载完成后使用js取token的数据,使用ajax请求查询用户信息。(写一个js用token用取得用户信息,每个页面一加载都调用这个js就好)
问题:查询的controller表现层是sso系统。Sso.e3.com localhost:8088,但需要在商城门户(另一个表现层)显示用户名称,www.e3.com localhost:8082,使用ajax请求跨域了。
Js不可以跨域请求数据。
什么是跨域:
1、域名不同
2、域名相同端口不同。
解决js的跨域问题可以使用jsonp。
Jsonp不是新技术,跨域的解决方案。使用js的特性绕过跨域请求。Js可以跨域加载js文件。
1.1 Jsonp原理
1.2 Json实现
1.2.1 客户端
使用jQuery。
1.2.2 服务端
1、接收callback参数,取回调的js的方法名。
2、业务逻辑处理。
3、响应结果,拼接一个js语句。