首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

单点登录原理与简单实现(6)

单点登录原理与简单实现(6)

四、部署图  单点登录涉及sso认证中心与众子系统,子系统与sso认证中心需要通信以交换令牌、校验令牌及发起注销请求,因而子系统必须集成sso的客户端,sso认证中心则是sso服务端,整个单点登录过程实质是sso客户端与服务端通信的过程,用下图描述
  sso认证中心与sso客户端通信方式有多种,这里以简单好用的httpClient为例,web service、rpc、restful api都可以
五、实现  只是简要介绍下基于java的实现过程,不提供完整源码,明白了原理,我相信你们可以自己实现。sso采用客户端/服务端架构,我们先看sso-client与sso-server要实现的功能(下面:sso认证中心=sso-server)
  sso-client
  • 拦截子系统未登录用户请求,跳转至sso认证中心
  • 接收并存储sso认证中心发送的令牌
  • 与sso-server通信,校验令牌的有效性
  • 建立局部会话
  • 拦截用户注销请求,向sso认证中心发送注销请求
  • 接收sso认证中心发出的注销请求,销毁局部会话
  sso-server
  • 验证用户的登录信息
  • 创建全局会话
  • 创建授权令牌
  • 与sso-client通信发送令牌
  • 校验sso-client令牌有效性
  • 系统注册
  • 接收sso-client注销请求,注销所有会话
  接下来,我们按照原理来一步步实现sso吧!
1、sso-client拦截未登录请求
  java拦截请求的方式有servlet、filter、listener三种方式,我们采用filter。在sso-client中新建LoginFilter.java类并实现Filter接口,在doFilter()方法中加入对未登录用户的拦截
[url=][/url]
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {    HttpServletRequest req = (HttpServletRequest) request;    HttpServletResponse res = (HttpServletResponse) response;    HttpSession session = req.getSession();         if (session.getAttribute("isLogin")) {        chain.doFilter(request, response);        return;    }    //跳转至sso认证中心    res.sendRedirect("sso-server-url-with-system-url");}[url=][/url]



2、sso-server拦截未登录请求
  拦截从sso-client跳转至sso认证中心的未登录请求,跳转至登录页面,这个过程与sso-client完全一样
返回列表