1.动手
  1. 实现了简单使用多系统,单一位置同时登陆,以及注销
  2. 主要认证中心流程代码编写在为在sso-login包下的ViewConreoller和LoginController;各系统的用户名显示是写在各自的ViewController中
  3. 在ViewController类中的toLogin方法
@Controller 
@RequestMapping("/view)
public class ViewControler{
  @RequestMapping("/login")
  public String toLogin(@RequestParam(requires=false, default=")String target, HttpSession session,
  @CookieValue(required=false, value="TOKEN") Cookie cookie){
    if(StringUtils.isEmpty(target)){
      target = "htttp://www.codeshop.com:8092/view/login";
    }
    if(cookie != null){
       String token = cookie.getValue();
       User user = LoginCacheUtil.loginUser.get(token);
      if(user != null){
         return "redirext:"+target;
      }
    }
    session.setAttribute("target",target);
    return "login";
  }
}
  1. 在LoginController类中的doLogin方法用于实现用户登录,getUserInfo方法获取用户信息,保存在session中,logout方法注销用户
@Controller 
@RequestMapping("/login")
public class LoginController {
  private static Set<User>dbUsers;
  static{ dbUsers = new HashSet<>();
  dbUsers.add(new User(0."ku","123456"));
  dbUsers.add(new User(1,"yan","654321")); }
  @PostMapping public String doLogin(User user, HttpSession session, HttpServletResponse response){
    String target = (String)session.getAtttribute("target");
    Optional<User>first = dbUsers.stream().filter( dbUser - >dbUser.getUsername().equals(user.getUsername() &&
    dbUser.getPassword().equals(user.geyPassword())).findFirst();
    if(first.isPresent()){
      String token = UUID.randomUUID().toString();
      LoginUtil.loginUser.put(token,first.get());
      Cookie cookie = new Cookie("TOKEN",token);
      cookie.setDomain("codeshop.com");
      response.addCookie(cookie);
    }else{
      session.setAttribute("msg","用户名或密码错误");
      return "loign"; } return "redirect:"+target;
  }

  @GetMaping("info")
  public ResponseEntity<User>getUserInfo(String token){
      if(!StingUtils.isEmpty(token)){
        User user = LoginCacheUtil.loginUser.get(token);
        return ResopnseEntity.ok(user);
      }else{
        return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
      }
  }

  @GetMappping("/logout")
  public String logOut(@CookieValue(required=false,value="TOKEN") Cookie cookkie, HttpServletResponse response, String target){
    cookie.setMaxAge(0);
    LoginCacheUtil.loginUser.remove(cookie.getValue());
    response.addCookie(cookie);
    return "redirect"+target;
  }
}
  1. 在sso-cart、sso-main、sso-vip包下的ViewController的toIndex方法用于实现用户信息登录、显示用户信息,注销用户信息
@Controller 
@RequestMapping("/view")
public class ViewController{
  @AutoWired RestTemplate restTemplate;
  private final String USER_INFO_ADDRESS="http://login.codeshop.com:8090/login/info?token=";
  @RequestMapping("/login")
  public String toLogin(@){
    if(cookie != null){
      String token = cookie.getValue();
      if(token != null){
        Map result = restTemplate.getForObject(USER_INFPO_ADDRESS,Map.class);
        session.setAttribute("loginUser",result);
      }
    }
  }
}
2.总结,反思,复盘
  1. 总结:大体实现了使用cookie完成单点登录,学到咯整体是如何实现的,流程是怎么样的,doLogin中将token作为键,用户信息坐位置存储在缓存类中(可以考虑使用Redis实现),再将token以“TOKEN”方式存在cookie;getUserInfo是判断token是否存在,再通过ResponseEntity形式返回状态;logOut方法主要通过删除cookie,以及缓存类中cookie,响应给浏览器实现注销
  2. ViewController中,判断cookie是否存在,token是否存在,login中通过token判断用户是否存在,返回登录页面 ,而其他系统是根据token以getForObject方法以JSON形式返回用户信息到页面
  3. 反思:自己敲了几遍,但是还是没法记住每个类的功能和具体的作用,需要反复理解,敲打,复盘
  4. 这次单点登录功能用到了前端的一些<form action="" method="">表单,以及<input name="username"/>标签,还有@RequestMapping,根据请求访问注解下的方法,404错误是请求路径与实际路径不配问题

1.使用cookie简单实现单点登录流程的更多相关文章

  1. SSO 基于Cookie+fliter实现单点登录 实例解析(一)

    接上文,SSO的理论讲解,接下来实践实践! 1.使用Cookie解决单点登录 技术点: 1.设置Cookie的路径为setPath("/").即Tomcat的目录下都有效 2.设置 ...

  2. java实现简单的单点登录

    java实现简单的单点登录 摘要:单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中.本文从业务的角度分析了单点登录的需求和应用领域:从技术本身的角度分析了单点登录技术的内部机制和实现 ...

  3. CAS学习笔记二:CAS单点登录流程

    背景 由于公司项目甲方众多,各甲方为了统一登录用户体系实现单点登录(SSO)开始要求各乙方项目对接其搭建的CAS单点登录服务,有段时间对CAS的流程很迷,各厂商还有基于CAS进行二次开发的情况,所以对 ...

  4. 搭建CAS服务器,并实现一个简单的单点登录的demo

    官网:http://jasig.github.io/cas/Cas Server下载:http://developer.jasig.org/cas/Cas Client下载:http://develo ...

  5. SSO单点登录、跨域重定向、跨域设置Cookie、京东单点登录实例分析

    最近在研究SSO单点登录技术,其中有一种就是通过js的跨域设置cookie来达到单点登录目的的,下面就已京东商城为例来解释下跨域设置cookie的过程 涉及的关键知识点: 1.jquery ajax跨 ...

  6. PHP简单实现单点登录功能示例

    1.准备两个虚拟域名 127.0.0.1  www.openpoor.com127.0.0.1  www.myspace.com 2.在openpoor的根目录下创建以下文件 index.PHP 1 ...

  7. 单点登录(二)使用Cookie+File实现单点登录登出(附源代码)

    上一篇文章<单点登录(一)使用Cookie+File实现单点登录>中,我们实现了单点登录的功能. 本文作为上一篇文章的扩展部分,加入"单点登出"功能. 源代码下载:链接 ...

  8. SSO 基于Cookie+fliter实现单点登录(SSO):工作原理

    SSO的概念: 单点登录SSO(Single Sign-On)是身份管理中的一部分. SSO的一种较为通俗的定义是:SSO是指訪问同一server不同应用中的受保护资源的同一用户,仅仅须要登录一次,即 ...

  9. 【SSO】一个简单的单点登录演示实现

    业务系统的管理后台往往数量众多,且各自需要一套用户名密码来进行登录,不方便使用.因此花了点时间研究如何实现一套单点登录系统. 众所周知,SSO系统设计中,往往需要想办法解决cookie不能跨域的问题, ...

  10. 点单登录原理和java实现简单的单点登录

    引用自:http://blog.csdn.net/zuoluoboy/article/details/12851725 摘要: 单点登录(SSO)的技术被越来越广泛地应用到各个领域的软件系统当中.本文 ...

随机推荐

  1. 盒模型属性-width height-padding-border-margin

    宽度 width: 作用:设置可以添加元素内容的区域的宽度. 属性值:  特殊应用: • 如果一个元素不添加width 属性,默认属性值为auto,不同的元素浏览器会根据其 特点自动计算出实际宽度,例 ...

  2. 第一课 Hello World程序

    接触一门编程语言都是从HelloWorld开始的.我们以Idea为开发工具,写一个JAVA版的HelloWorld. 1,启动idea,点击菜单 File->New->Project 新建 ...

  3. Matlab %壹

    第一章 基本操作 MATLAB as A Calculator operators: + - * / ^ 顺序: Parenthesis () Power (^) *or/ +or- 特殊的: sqr ...

  4. jieba原理

    一.jieba介绍jieba库是一个简单实用的中文自然语言处理分词库. jieba分词属于概率语言模型分词.概率语言模型分词的任务是:在全切分所得的所有结果中求某个切分方案S,使得P(S)最大. ji ...

  5. [Unity热更新]Addressables

    参考链接: https://linxinfa.blog.csdn.net/article/details/122390621?spm=1001.2014.3001.5502 总结: 1.

  6. PYCHARM开源版-免费版本

    下载地址:https://www.jetbrains.com/pycharm/download/#section=windows 亲测可以使用,不需要任何破解工具

  7. linux查看已知进程PID所在的目录

    pwdx 命令 pwdx PID [was@CMTRMWAS1 ~]$ pwdx 31996 31996: /was/AppServer/profiles/AppSrv03

  8. v2即时通讯的应用

    1.建立webscoket.js: import Vue from 'vue' import { Message } from 'element-ui' let v = new Vue() v.$me ...

  9. 关于k8s微服务的基础知识分享总结

    1.说起k8s,先得讲讲微服务,来个图(百度上找到的图),初识 1.微服务架构强调的是一种架构模式,提倡将单一的应用程序,划分为一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协调配合, ...

  10. ArchKeeper (开篇):架构守护平台的问题与理念

    作者:京东科技 倪新明 在敏捷开发环境下,系统通过迭代增量的交付价值,系统架构也是如此.团队不可能在项目之初就建立完美的系统架构,系统架构应该随着系统迭代不断演进.架构演进和架构腐化是看待架构的不同视 ...