单点登录

单点登录:单点登录就是在一处登录之后再其他域也可以用到登录信息,单点登录用jsonP实现的跨域访问。


jsonP: javascript动态的在html页面中生成一个‘script’标签,把我们要发送给其他域名的参数用GET方式带在src的url后面,其他域把处理好的数据用js函数调用的方式包装放回给我们的网站域名


单点登录基本思路:将用户登陆成功之后的Token为key值,用户的id或者用户对象的json字符串为value值存到redis中,再将token为value存到cookie中(比如名字为User),用jsonP获取cookie的名字,将cookie的名字传给后台然后再Redis中获取用户信息

JsonP如何实现跨域访问的: 发起一个ajax请求, 配置一个dataType:'jsonp',就可以发起一个跨域请求。jsonp指定服务器返回的数据类型为jsonp格式,可以看发起的请求路径,自动带了一个callback=xxx,xxx是jquery随机生成的一个回调函数名称。

代码如下

<script>
 7 
 8         $(document).ready(function () {
 9 
10             $("#btn").click(function () {
11 
12                 $.ajax({
13                     url: "http://localhost:9090/student",
14                     type: "GET",
15                     dataType: "jsonp", //指定服务器返回的数据类型
16                     success: function (data) {
17                         var result = JSON.stringify(data); //json对象转成字符串
18                         $("#text").val(result);
19                     }
20                 });
21 
22             });
23 
24         });
25     </script>



服务端代码

扫描二维码关注公众号,回复: 128458 查看本文章
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 2     response.setCharacterEncoding("UTF-8");
 3     response.setContentType("text/html;charset=UTF-8");
 4 
 5     //数据
 6     List<Student> studentList = getStudentList();
 7 
 8 
 9     JSONArray jsonArray = JSONArray.fromObject(studentList);
10     String result = jsonArray.toString();
11 
12     //前端传过来的回调函数名称
13     String callback = request.getParameter("callback");
14     //用回调函数名称包裹返回数据,这样,返回数据就作为回调函数的参数传回去了
15     result = callback + "(" + result + ")";
16 
17     response.getWriter().write(result);
18 }

猜你喜欢

转载自blog.csdn.net/sunsgne_ac/article/details/79446837