文档章节

开发单点登录时对 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
静安
高级程序员
单点登陆实战,重新认识session

前言: 首先介绍下项目背景,我经手的项目呢,是一个音乐网站,看上去是一个网站,实际上是三个项目,首先是一个基于onethink开发的音乐分享平台,第二个是基于客客族的一个众包类型的平台,第三个是...

勃起狂奔者
2017/10/21
0
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
单点登录(SSO)看这一篇就够了

背景 在企业发展初期,企业使用的系统很少,通常一个或者两个,每个系统都有自己的登录模块,运营人员每天用自己的账号登录,很方便。 但随着企业的发展,用到的系统随之增多,运营人员在操作...

小忽悠
09/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux使用ntfs-3g操作ntfs格式硬盘

Linux内核目前只支持对微软NTFS文件系统的读取。 NTFS-3G 是微软 NTFS 文件系统的一个开源实现,同时支持读和写。NTFS-3G 开发者使用 FUSE 文件系统来辅助开发,同时对可移植性有益。 安装 ...

linuxprobe16
今天
1
0
kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
7
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
3
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
18
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部