sso(single sign on)
sso系统使用
https://www.cnblogs.com/shuai-server/p/8987070.html
一:什么是sso(single sign on) ?
sso(单点登录系统)简单说就是客户端第一次访问应用1的时候,由于没有登录,会被引导到登录页面进行登录,如果登录校验通过,将返回一个认证信息ticket,作为认证凭据。下次客户端访问应用2的时候,发送的url请求会携带着ticket作为自己的认证凭据,服务器会将该请求携带的ticket交给认证中心进行比对,检验,如果检验通过,应用2在可以不登录的情况下访问内部的资源信息。
二:单点登录系统的整个登录过程
(1)传统登录方式(单应用下)
图一:为传统的登录方式。在一个工程下这套登录机制是没有问题的。但是集群环境下会出现要求用户多次登录的情况
如何解决集群环境中用户多次登录的情况?
解决多次登录的方案有两种:就是解决session共享的问题
1.配置tomcat集群,在tomcat中配置session共享(session复制),但是问题是tomcat部署的节点过多,会出现性能问题。所以一般不适用这种方式
2.可以使用session服务器,是每个节点保持无状态,保存session信息。模拟session。
单点登录就是为了解决session共享问题提出的一套解决方案。使用redis模拟session,实现session的统一管理。
(2)使用单点登录的业务流程
登录流程解析:
第一步:第一次访问,进入登录系统输入用户名密码进行验证登录,如果登录成功,生成Token对象,作为认证令牌(token相当于原来的jsessionid字符串,这里使用uuid)
第二步:将返回的token对象信息存入redis服务器。key 就是token , value就是登录用户的信息
第三步:既然是模拟session,所以也需要设置key的过期时间。
第四步:将token(存储的key)写入cookie中,作为用户请求的url参数信息
第五步:用户第二次访问,首先检查用户是否登录,将写入cookie中的token作为请求参数,服务器会从url中解析token的值,然后将解析的token值作为key查询redis服务器;如果查询结果为空,表示session已经过期,要求客户端跳转到登录页面完成登录操作;如果查询结果不为空,需要将查询的信息(登录用户的信息)作为对象返回,然后重新设置key的过期时间。
第六步:解决跨域的问题,使用js发送ajax请求, 使用jsonp解决跨域问题。需要服务器返回的数据格式为mycallback:{id:xx,name:xx},所以将返回的json数据进行拼接成要求的格式即可。
三:登录过程的核心代码
解决跨域问题的服务端
复制代码
@RequestMapping(value = "/user/token/{token}", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public String getTokenName(@PathVariable String token, String callback) {
E3Result result = tokenService.getToken(token);
if (StringUtils.isNotBlank(callback)) {
// 拼接成页面需要的数据给事
// mycall({id:1,name:z});
String json = callback + "(" + JsonUtils.objectToJson(result) + ");";
System.out.println(json);
return json;
}
return JsonUtils.objectToJson(result);
}
复制代码
客户端代码:
复制代码
var E3MALL = {
checkLogin : function(){
//COOKIE_TOKEN_KEY设置的cookie的name值
var _ticket = $.cookie("COOKIE_TOKEN_KEY");
if(!_ticket){
return ;
}
$.ajax({
url : "http://localhost:8088/user/token/" + _ticket,
dataType : "jsonp",
type : "GET",
success : function(data){
if(data.status == 200){
var username = data.data.username;
var html = username + ",欢迎!<a href=\"http://www.e3mall.cn/user/logout.html\" class=\"link-logout\">[退出]</a>";
$("#loginbar").html(html);
}
}
});
}
}
$(function(){
// 查看是否已经登录,如果已经登录查询登录信息
E3MALL.checkLogin();
});
复制代码
分类: sso单点登录
sso(single sign on)的更多相关文章
- SSO(Single Sign On)系列(一)--SSO简单介绍
任何类型的站点,到达一定规模之后一定会存在这种问题:比方我们有N个系统.传统方式下我们就须要有N对不同的username和password,本来这些系统的开发都能为我们带来良好的效益,用户在用的时候并 ...
- java:sso(单点登录(single sign on),jsp文件动静态导入方式,session跨域)
1.jsp文件导入: 2.session跨域: 3.sso(单点登录(single sign on): sso Maven Webapp: LoginController.java: package ...
- 单点登录(Single Sign On)解决方案
单点登录(Single Sign On)解决方案 需求 多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. A 网站和 B 网站是同一家公司的关联服务.现在要求,用户只要在其中一个网 ...
- 单一职责原则(Single Responsibility Principle)
单一职责原则(SRP:The Single Responsibility Principle) 一个类应该有且只有一个变化的原因. There should never be more than on ...
- 单一指责原则(Single Responsibility Principle) SRP
using System; using System.Collections.Generic; using System.Text; namespace SingleResponsibilityPri ...
- ZooKeeper保证之单一视图(Single System Image)
由于ZooKeeper的数据模型简单且全部在内存中,ZooKeeper的速度非常快.它提供了一系列保证(Guarantees): • 顺序一致性(Sequential Consistency) • 原 ...
- SPA(single page application)
一.SPA的概述 SPA(single page application)单页面应用程序,在一个完成的应用或者站点中,只有一个完整的html页面,这个页面有一个容器,可以把需要加载的代码片段插入到该容 ...
- 北风设计模式课程---单一职责原则(Single Responsibility Principle)
北风设计模式课程---单一职责原则(Single Responsibility Principle) 一.总结 一句话总结: 一个类应该有且只有一个变化的原因:单一职责原则(SRP:Single Re ...
- 单点登录 SSO(Single Sign-On)的实现原理
为什么要 SSO? 企业的信息化过程是一个循序渐进的过程,这就造成在企业的不同时期,根据业务和发展需要,构建了多个应用程序,而这些应用程序在功能.设计和技术可能都有所不同,就形成了各自独立的用户库和用 ...
随机推荐
- shell -- 获取绝对路径
readlink -f <file> readlink -m <file> 会把file的相对路径转化为绝对路径 几个选项的区别: -f, --canonicalize can ...
- js验证营业执照号码是否合规
需求:最近要做实名验证的功能,但是验证我们要验证严谨一点,参考了网上关于营业执照号码规则和一些大侠的代码的代码,总结一下. 营业执照号码规则:规则 代码: //方法一:function checkLi ...
- FW:Software Testing
Software Testing Testing with a Purpose Software testing is performed to verify that the completed s ...
- button小手设置 css的cursor
需要对元素的css属性cursor进行设置.cursor可能的值: default 默认(通常是一个箭头) auto 默认.浏览器设置的光标 crosshair 十字线形状. pointer 小手形状 ...
- IIS网站不能访问
摘要:IIS环境下,部署的网站在服务器上可以正常访问,客户端却不能访问. 原因:防火墙入站规则万维网服务没有开启.
- python监控linux内存并写入mongodb
(需要安装psutil 用来获取服务器资源,以及pymongo驱动)#pip install psutil #pip install pymongo #vim memory_monitory.py 文 ...
- 记一次使用cmd执行java文件遇到的坑...包括“使用java命令运行class文件提示“错误:找不到或无法加载主类“的问题”
今天写了一个java文件,类似聊天软件的东西.在eclipse里输入输出显得没感觉,于是乎就准备在cmd里输入和显示输出.如下图,我准备运行的是ChatDemo.class文件.路径是:D:\work ...
- C Primer Plus(第六版)中文版 中的错误1
#include<stdio.h> #include<stdlib.h> #include<string.h> #define TSIZE 45 struct fi ...
- apache和tomcat搭建集群
最近在学习简单的apache服务器和两个tomcat一起搭建集群,这里简单记录一下 1.准备工作 ①搭建一个可以运行的web项目 用maven搭建springmvc项目 ,只要将这里面的web.xml ...
- python 2.7支持中文
在代码的第一行加上#coding=utf-8 return render_template('index.html',message=u"小明小明")print u'你要打印的字符 ...