广告
返回顶部
首页 > 资讯 > 后端开发 > Python >springboot简单实现单点登录的示例代码
  • 938
分享到

springboot简单实现单点登录的示例代码

2024-04-02 19:04:59 938人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

什么是单点登录就不用再说了,今天通过自定义sessionId来实现它,想了解的可以参考https://www.xuxueli.com/xxl-sso/ 讲一下大概的实现思路吧:这里有

什么是单点登录就不用再说了,今天通过自定义sessionId来实现它,想了解的可以参考https://www.xuxueli.com/xxl-sso/

讲一下大概的实现思路吧:这里有一个认证中心,两个单独的服务。每个服务去请求的 时候都要经过一个过滤器,首先判断该请求地址中有没有sessionid,有的话则写入cookie ,如果请求地址中没有sessionid那么从cookie中去获取,如果cookie中获取到了则证明登录了,放行即可。否则跳转到认证中心,此时把请求地址当做参数带到认证中,认证中心认证成功后把sessionid写入cookie,同时重定向带过来的地址,并且把sessionid拼接上。一般直接在认证中心认证过后,直接访问其他系统地址是不会拦截该请求的,所以这个时候可以在跳转到认证页面的时候先判断认证中心这边有没有sessionid,有的话,直接返回,否则再进入认证页面。
语言表达不清楚,下面先来几张图压压惊,看看效果。

没有登录前我访问:Http://127.0.0.1:2000/client1 直接跳转到认证页面了

在这里插入图片描述

认证成功后

在这里插入图片描述

由于我这client系统中登陆过了,所以我直接访问client2,不用登录直接出现了效果

在这里插入图片描述

我接下来直接先去认证中心登录一下

在这里插入图片描述

此时访问:http://127.0.0.1:2000/client1

在这里插入图片描述

效果演示完毕了,下面上代码

Client1代码:

@Controller
public class Client1Controller {

    @GetMapping("/client1")
    public String client1(){
        return "client1";
    }
}
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Component
public class Client1Filter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        HttpServletResponse response = (HttpServletResponse)servletResponse;
        String parameter = request.getParameter("sso-sessionId");
        if(StringUtils.isNotEmpty(parameter)){
            Cookie cookie = new Cookie("sso-sessionId", parameter);
            cookie.setPath("/");
            response.addCookie(cookie);
        }
        String token="";
        Cookie[] cookies = request.getCookies();
        if(cookies!=null){
            for(Cookie cookie:cookies){
                String name = cookie.getName();
                if(name.equals("sso-sessionId")){
                    token = cookie.getValue();
                }
            }
        }
        if(StringUtils.isEmpty(token)){
            response.sendRedirect("http://127.0.0.1:4000/login?return_url="+request.getRequestURL());
            return;
        }
        chain.doFilter(servletRequest,servletResponse);
    }
}

由于Client2代码和Client1代码基本一直,所以就不贴上了

认证中心代码

import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.WEB.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

import java.util.UUID;

@Controller
public class ServerController {


    @GetMapping("/login")
    public String login(String return_url, HttpServletRequest request,HttpServletResponse response) throws IOException {
        String token=null;
        Cookie[] cookies = request.getCookies();
        if(cookies!=null){
            for(Cookie cookie:cookies){
                String name = cookie.getName();
                if(name.equals("sso-sessionId")){
                    System.out.println(cookie);
                    token = cookie.getValue();
                }
            }
        }
        if(StringUtils.isNotEmpty(return_url)){
            if(StringUtils.isNotEmpty(token)){
                return_url=return_url+"?sso-sessionId="+token;
                response.sendRedirect(return_url);
            }
        }
        request.setAttribute("return_url",return_url);
        return "login";
    }

    @GetMapping("/success")
    public String success(){
        return "success";
    }


    @PostMapping("/doLogin")
    //@ResponseBody
    public void doLogin(String userName, String passWord, String return_url, HttpServletResponse response) throws IOException {
        String token = UUID.randomUUID().toString().replace("-","");
        Cookie cookie = new Cookie("sso-sessionId", token);
        cookie.setPath("/");
        response.addCookie(cookie);
        if(StringUtils.isEmpty(return_url)) {
            response.sendRedirect("http://127.0.0.1:4000/success");
        }else{
            return_url=return_url+"?sso-sessionId="+token;
            response.sendRedirect(return_url);
        }
    }
}

这样的话,一个简单的单点登录就完成了,至于扩展优化,自行发挥了

到此这篇关于SpringBoot简单实现单点登录的示例代码的文章就介绍到这了,更多相关springboot 单点登录内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: springboot简单实现单点登录的示例代码

本文链接: https://www.lsjlt.com/news/162483.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • springboot简单实现单点登录的示例代码
    什么是单点登录就不用再说了,今天通过自定义sessionId来实现它,想了解的可以参考https://www.xuxueli.com/xxl-sso/ 讲一下大概的实现思路吧:这里有...
    99+
    2022-11-12
  • SpringBoot整合Keycloak实现单点登录的示例代码
    目录1. 搭建Keycloak服务器2. 配置权限2.1. 登陆2.2. 创建Realm2.3. 创建用户2.4. 创建客户端2.5. 创建角色2.6. 配置用户角色关系2.7. 配...
    99+
    2022-11-13
  • Django实现简单登录的示例代码
    目录创建django项目使用模型的url.py加载静态文件页面跳转创建数据库模型提交表单提交ajax提交创建django项目 创建项目的命令行语句: django-admin st...
    99+
    2022-11-12
  • springboot扫码登录的简单实现
    目录前言项目简介实现思路实现步骤前言 本文将介绍基于SpringBoot + Vue + Android实现的扫码登录demo的总体思路,完整代码已上传到GitHub。Web端体验地...
    99+
    2022-11-12
  • 基于ASP.NET实现单点登录(SSO)的示例代码
    目录背景逻辑分析代码实现Service总结背景 先上个图,看一下效果: SSO英文全称Single Sign On(单点登录)。SSO是在多个应用系统中,用户只需要登录一次就可以访...
    99+
    2022-11-13
  • React实现登录表单的示例代码
    作为一个Vue用户,是时候扩展一下React了,从引入antd、配置less、router,终于实现了一个简单的登录表单。 代码如下: import React from 'r...
    99+
    2022-11-12
  • SpringBoot+Netty实现简单聊天室的示例代码
    目录一、实现1.User类2.SocketSession类3.SessionGroup4.WebSocketTextHandler类5.WebSocketServer类6.index...
    99+
    2022-11-13
  • nestjs实现图形校验和单点登录的示例代码
    目录实现图形校验和单点登录前置条件安装Moduleservice如何生成图形验证码如何使用 session接入 mongose实现图形校验和单点登录 效果图 前置条件 学习一下 n...
    99+
    2023-05-20
    nestjs 图形校验 nestjs 单点登录
  • SpringBoot实现扫码登录的示例代码
    目录一、首先咱们需要一张表二、角色都有哪些三、接口都需要哪些?四、步骤五、疯狂贴代码Spring Boot中操作WebSocket最近有个项目涉及到websocket实现扫码登录,看...
    99+
    2022-11-13
  • SpringBoot实现token登录的示例代码
    为什么引入token机制 在进行登录验证时,我们需要session或cookie会话进行验证,客户端包括浏览器、app、微信小程序、公众号,只有浏览器有session和cookie机...
    99+
    2022-11-13
  • CAS实现单点登录实例源码
    修改server.xml文件,如下: 注意: 这里使用的是https的认证方式,需要将这个配置放开,并做如下修改:port="8443" protocol="org.apache.coyote.htt...
    99+
    2023-06-05
  • SpringBoot单点登录怎么实现
    这篇文章主要介绍了SpringBoot单点登录怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot单点登录怎么实现文章都会有所收获,下面我们一起来看看吧。1.具体实现步骤添加拦截器,设置U...
    99+
    2023-07-04
  • springbootoauth2实现单点登录实例
        我们见过的很多网站,容许使用第三方账号登录,他不需要关注用户信息,只需要用户拿到授权码就可以访问。     oauth2是用...
    99+
    2022-11-12
  • SpringBoot如何实现简单的登录注册
    这篇文章将为大家详细讲解有关SpringBoot如何实现简单的登录注册,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。第一步:建立简单的项目第二步:建一个简单的数据表第三步:配置文件如下:pom.xml文件...
    99+
    2023-06-29
  • java 实现简单圣诞树的示例代码
    以下是一个简单的Java代码示例,实现了一个简单的圣诞树的打印功能:```javapublic class ChristmasTre...
    99+
    2023-09-16
    java
  • python实现socket简单通信的示例代码
    首先先来简单介绍下socket: (具体更详细介绍的可以在网上找找,都讲得非常详细),这里主要是我自己的一些理解。 socket是在应用层与传输层之间的一个抽象层,它的本质是编程接...
    99+
    2022-11-12
  • java实现简单圣诞树的示例代码
    以下是一个简单的Java示例代码,实现了一个基本的圣诞树打印功能:```javapublic class ChristmasTree...
    99+
    2023-09-17
    Java
  • SpringBoot+Vue实现简单的登录注册功能
    文章目录 一、前言1.开发环境2.功能3.项目运行截图 二、撸代码1.构建前端项目2.构建后端项目3.前端页面编写4.后端代码编写5.前后端联调 三、小结 一、前言 ...
    99+
    2023-09-20
    vue.js spring boot java mysql
  • Vue实现单点登录控件的完整代码
    这里提供一个Vue单点登录的demo给大家参考,希望对想了解的朋友有一些帮助。具体的原理大家可以查看我的上篇文章 vue实现单点登录的N种方式废话不多少直接上代码这里分两套系统,一是...
    99+
    2022-11-12
  • SpringBoot整合token实现登录认证的示例代码
    1.pom.xml <dependencies> <dependency> <groupId>org.springframework.b...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作