开发单点登录时对 Cookie的重新认识
博客专区 > 凡凡 的博客 > 博客详情
开发单点登录时对 Cookie的重新认识
凡凡 发表于2年前
开发单点登录时对 Cookie的重新认识
  • 发表于 2年前
  • 阅读 6
  • 收藏 0
  • 点赞 2
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

摘要: 单点登录 Cookie 重新认识

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

     单点登录(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
×
凡凡
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: