servlet 单点登录 客户端

栏目: Java · 发布时间: 4年前

内容简介:上方实现了http://localhost:8083/ssoLogin?source=http://127.0.0.1:8085输入链接 输入用户名密码此时执行

流程

上方实现了http://localhost:8083/ssoLogin?source=http://127.0.0.1:8085

输入链接 输入用户名密码

输入webapp1

此时执行

ticket = servletRequest.getParameter("ticket");
        if(!Objects.equals(null, ticket) && !Objects.equals("", ticket.trim())){
            // 超时判断
            ticket = ticket + ":" + (System.currentTimeMillis() + 1000);
            // 添加cookie
            ((HttpServletResponse)servletResponse).addCookie(new Cookie("ming", ticket));
            filterChain.doFilter(servletRequest, servletResponse);
        }else{
            // 跳转回登录界面进行正常的登录
            ((HttpServletResponse)servletResponse).sendRedirect(server + "/ssoLogin?source=" + app);
        }

由于为空值,使用 进行重定向

重定向发送到server

执行

else if(Objects.equals("/ssoLogin", req.getServletPath())){
            req.getRequestDispatcher("/WEB-INF/view/login.jsp").forward(req, resp);

此时共享同一个req

输入完成用户名和密码以后,跳转到

// 请求为登录
        if(Objects.equals("/login", req.getServletPath())){
            String username = req.getParameter("username");
            String password = req.getParameter("password");
            String source = req.getParameter("source");

            // 得到浏览器路由栈的回退地址
          if(null == source || Objects.equals("", source)){
                source = req.getHeader("referer");
                source = source.substring(source.indexOf("source=") + 7);
            }

            if(Objects.equals(username, password)){
                // 生成uid
                String ticket = UUID.randomUUID().toString();
                System.out.println(ticket);
                // 登录成功跳转登录回页面
                resp.sendRedirect(source + "/main?ticket=" + ticket + "&domains=" + domains.replace(source + ",", "").replace("," + source, "").replace(source, ""));
            }else {
                // 登录失败转发到login.jsp
                req.setAttribute("source", source);
                req.getRequestDispatcher("/WEB-INF/view/login.jsp").forward(req, resp);
            }

此时已经共享同一个req...

由于正确,,进行客户端302跳转 到source

过滤器过滤执行

ticket = servletRequest.getParameter("ticket");
        if(!Objects.equals(null, ticket) && !Objects.equals("", ticket.trim())){
            // 超时判断
            ticket = ticket + ":" + (System.currentTimeMillis() + 1000);
            // 添加cookie
            ((HttpServletResponse)servletResponse).addCookie(new Cookie("ming", ticket));
            filterChain.doFilter(servletRequest, servletResponse);
        }else{
            // 跳转回登录界面进行正常的登录
            ((HttpServletResponse)servletResponse).sendRedirect(server + "/ssoLogin?source=" + app);
        }

在resp中add cookie

此时执行

if(Objects.equals("/main", req.getServletPath())){
            String domain = req.getParameter("domains");
            String ticket = req.getParameter("ticket");
            for(String server: domain.split(",")){
                // trim防止空串
                if(!Objects.equals(null, server) && !Objects.equals("", server.trim())){
                }
            }
            // 成功之后跳转
            req.getRequestDispatcher("/WEB-INF/views/main.jsp").forward(req, resp);

依旧共享同一个req,,设置cookie

此时cookie已经设置成功

cookie的作用域为server

删除server下的cookie即全部失效


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

水平营销

水平营销

[美] 菲利普·科特勒、费尔南多・德・巴斯 / 陈燕茹 / 中信出版社 / 2005-1 / 25.00元

《水平营销》阐明了相对纵向营销而言的的水平营销的框架和理论。引入横向思维来作为发现新的营销创意的又一平台,旨在获得消费者不可能向营销研究人员要求或建议的点子。而这些点子将帮助企业在产品愈加同质和超竞争的市场中立于不败之地。 《水平营销》提到: 是什么创新过程导致加油站里开起了超市? 是什么创新过程导致取代外卖比萨服务的冷冻比萨的亮相? 是什么创新过程导致巧克力糖里冒出了玩具......一起来看看 《水平营销》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

SHA 加密
SHA 加密

SHA 加密工具