sso 登出_SSO单点登录/登出系统实现

本文详细介绍了SSO(Single Sign-On)单点登录/登出系统的实现,包括用户登录、登出流程,接口设计,以及核心代码展示。通过认证中心和应用服务器的交互,实现了用户在多个系统间的一次登录/登出。涉及的技术包括Mybatis、Redis、cookie加密和token验证。
摘要由CSDN通过智能技术生成

先把源码贴出来,再慢慢讲解思路和原理以及实现方式

-->源代码1.0

整合了Mybatis +redis/redis集群二级缓存+cookie加密机制+token

-->源代码2.1  密码:5npa

1 什么是单点登录?

2 功能分析

单点登录这里我用三个工程来 实现和演示

1 ssoServer 是认证中心,所有用户的登录操作都在这里完成

基于maven ,使用ssm搭建

2 sso_app1 系统的分应用服务器1

基于maven,因为只是用来演示,所以使用的是原生servlet

3 sso_app2 系统的分应用服务器2.

基于maven,因为只是用来演示,所以使用的是原生servlet

单Web应用登录,主要涉及到认证、授权、会话建立、取消会话等几个关键环节。推广到多系统,每个系统也会涉及到认证、授权、会话建立取消等工作。那我们能不能把每个系统的认证工作抽象出来,放到单独的服务应用中取处理,是不是就能解决单点登录问题?

思考方向是正确的,我们把这个统一处理认证服务的应用叫认证中心。当用户访问子系统需要登录时,我们把它引到认证中心,让用户到认证中心去登录认证,认证通过后返回并告知系统用户已登录。当用户再访问另一系统应用时,我们同样引导到认证中心,发现已经登录过,即返回并告知该用户已登录。

用户登录:

用户首次登录时流程如下:

1.用户浏览器访问系统A需登录受限资源。

2.系统A发现该请求需要登录,将请求重定向到认证中心,进行登录。

3.认证中心呈现登录页面,用户登录,登录成功后,认证中心重定向请求到系统A,并附上认证通过令牌。

4.系统A与认证中心通信,验证令牌有效,证明用户已登录。

5.系统A将受限资源返给用户。

用户登出:

整个登出流程如下:

1.客户端向应用A发送登出Logout请求。

2.应用A取消本地会话,同时通知认证中心,用户已登出。

3.应用A返回客户端登出请求。

4.认证中心通知所有用户登录访问的应用,用户已登出。

3 接口设计

经过归纳分析一共6个主要接口 4个是服务端的 2个是每个客户端需要实现的接口:

ssoServer接口:

1登录页

/auth/toLogin

描述:进入输入登录信息页面。(通过应用重定向,或者直接访问登录页面)

2登录

/auth/login

描述:登录页面提交的登录请求(账号,密码)。

3令牌验证

/ticket/verify

描述:验证令牌是否有效,应用服务器通过发送HTTP请求来校验令牌是否有效

4登出

/auth/loginOut

描述:退出当前用户的登录状态,同时退出所有子系统(应用服务器)的登录状态。

ssoClient(应用服务器)接口:

1登出

/exit

退出登录,重定向到认证中心的退出接口,并携带本应用的首页(认证中心退出成功后重定向的页面)

2用户中心

/main

需要登陆授权的网页

4 核心代码

服务端:

登录controller

package rg.sso.controller;

import java.io.IOException;

import java.security.Principal;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Map.Entry;

import javax.servlet.http.Cookie;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.util.DigestUtils;

import org.springframework.util.StringUtils;

import org.springframework.web.bind.annotation.CookieValue;

import org.springframework.web.bind.annotation.RequestMapping;

import com.mysql.fabric.Response;

import com.mysql.jdbc.interceptors.SessionAssociationInterceptor;

import rg.sso.bean.User;

import rg.sso.cache.GlobalSessionCache;

import rg.sso.cache.redis.RedisCache;

import rg.sso.service.UserService;

import rg.sso.util.ConfigUtil;

import rg.sso.util.CookieUtil;

import rg.sso.util.HttpUtil;

import rg.sso.util.Md5Util;

import rg.sso.util.StringUtil;

/**

* @Title:AuthController

* @Description:授权控制器</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值