文档章节

开发单点登录时对 Cookie的重新认识

凡凡
 凡凡
发布于 2016/05/08 10:43
字数 574
阅读 6
收藏 0

单点登录的解释取自百度百科为:

     单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    使用方式和实现方案分为 子域、全域、http-https等形式。 今天来聊一下关于Cookie的写入与清除问题。

结论为:写入Cookie时配置的属性,在进行删除的时候,必须带有相同的属性,方可Remove掉!!!


为了满足测试进行配置host信息

127.0.0.1    www.a.com

127.0.0.1    sub.a.com

127.0.0.1   itest.sub.a.com


Cookie的写入:

Cookie的写入,特别注意属性[path、domain]的配置。

@RequestMapping(value = "/add", method = RequestMethod.GET)
public void addCookie(DiyResponse diyResponse,HttpServletRequest req,HttpServletResponse response) {
    
    Cookie cookie = new Cookie("main_abc1","test value");
    #path 属性如果不设置,便直接指定为当前Uri的地址,建议明确,删除时同时需要的,不然删除不了
    cookie.setPath("/");
    #请注意,如果配置此属性,Remove时也必须进行指定,不然是删除不了
    cookie.setDomain(".a.com");
    response.addCookie(cookie);

    try {
        response.getWriter().println("add success");
    } catch (IOException e) {
        e.printStackTrace();
    }
}


Cookie的删除:

在Cookie删除时,一定需要明确,之前是怎么写入的,是否配置path、domain这些属性!!如果是只单维度控制path或domainCookie是清除不掉的。

下面示例便是失败的。需要指定写入机同属性方可。


 失败Demo:

@RequestMapping(value = "/clear", method = RequestMethod.GET)
public void removeCookie(HttpServletRequest req,HttpServletResponse response) {

    Cookie[] cookies =  req.getCookies();
    for (Cookie cookie : cookies) {
        String name = cookie.getName();
        // 找到需要删除的Cookie
        if (name.compareTo("main_abc1") == 0) {
            // 设置生存期为0
            cookie.setMaxAge(0);             
            cookie.setPath("/");
            // 设回Response中生效
            response.addCookie(cookie);
        }
    }
    try {
        response.getWriter().println("删除完成");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

成功示例:

@RequestMapping(value = "/clear", method = RequestMethod.GET)
public void removeCookie(HttpServletRequest req,HttpServletResponse response) {

    Cookie[] cookies =  req.getCookies();
    for (Cookie cookie : cookies) {
        String name = cookie.getName();
        // 找到需要删除的Cookie
        if (name.compareTo("main_abc1") == 0) {
            // 设置生存期为0
            cookie.setMaxAge(0);   
            //明确指定Cookie Path           
            cookie.setPath("/");
            //删除指定的domainCookie            
            cookie.setDomain(".a.com");
            
            // 设回Response中生效
            response.addCookie(cookie);
        }
    }
    try {
        response.getWriter().println("删除完成");
    } catch (IOException e) {
        e.printStackTrace();
    }
}


 由于在做单点登录的时候,纠正了许多认证行的通的常识知识,在些记录一下,纠正问题,拾起基础知识。



© 著作权归作者所有

共有 人打赏支持
凡凡
粉丝 0
博文 1
码字总数 574
作品 0
静安
高级程序员
基于 Web 的单点登录理论研究之跨域和票据设计

最近好多朋友问我关于 SSO 的问题,其实市面上有很多成型的产品,SSO 理论本身也提了好多年了,下面是我以前写的一篇文章《基于 Web 的单点登录理论研究》里的一部分关于跨域和票据设计问题,...

青夜之衫
2017/12/08
0
0
基于 Web 的单点登录理论研究之跨域和票据设计

最近好多朋友问我关于 SSO 的问题,其实市面上有很多成型的产品,SSO 理论本身也提了好多年了,下面是我以前写的一篇文章《基于 Web 的单点登录理论研究》里的一部分关于跨域和票据设计问题,...

唐玄奘
2017/12/04
0
0
前端需要了解的 SSO 与 CAS 知识

不管是什么公司,只要产品数量大于一个,那么单点登录势必是绕不过去的一个问题。作为前端程序员,我们对其虽然接触不多,但适当的了解还是必要的。本文就来谈谈单点登录相关的问题。 前置知...

丁香园F2E
2017/11/07
0
0
Cookie 跨域,实现单点登录

Cookie 跨域,实现单点登录 Table title 最近在做一个单点登录的系统整合项目,之前我们使用控件实现单点登录(以后可以介绍一下)。但现在为了满足客户需求,在不使用控件情况下实现单点登录,...

james_laughing
2016/06/12
108
0
cas单点注销失败Error Sending message to url endpoint

  最近在做cas单点登录时,由于是单点登录。必然会涉及到单点注销,然而在做单点注销时由于对cas注销机制不了解加之测试条件所致,所有测试都是在本机下完成(机器性能较低,没用虚拟机);...

无声胜有声
2015/12/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring详解

Spring详解(一)------概述 目录 1、什么是 Spring ? 2、Spring 起源 3、Spring 特点 4、Spring 框架结构 5、Spring 框架特征 6、Spring 优点   本系列教程我们将对 Spring 进行详解的介绍...

DemonsI
13分钟前
0
0
CentOS7系统Nginx安装

1、下载nginx,官方网站https://nginx.org wget https://nginx.org/download/nginx-1.14.0.tar.gz 2、下载Nginx Sticky Module,官方网站https://bitbucket.org/nginx-goodies/nginx-sticky-......

m_lm
16分钟前
0
0
使用zTree树控件(二)

1:treeNode.checked用于判断是勾选还是取消勾选。(treeNode指的是节点)

uug
16分钟前
0
0
export, import 和 export default的区别

ES6的两个功能: export 和 import export 对外输出模块 import 引入(加载)进来一个模块 一、export => import 单个变量 export var name = "lishi" 在其他文件里引用 import {name} f...

Js_Mei
21分钟前
1
0
打造RecyclerView的n级列表

先上效果图: 1.该多级列表的优势: 支持无限级列表展开 基于一个recyclerView实现 可以自定义每一级item的样式,定制化更强 2.设计的思路 数据结构List<ItemBean>,ItemBean类中有变量List<...

WelliJohn
30分钟前
1
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部