1.10 SSO微服务工程中用户行为日志的记录

SSO微服务工程中用户行为日志的记录 系统需求分析 业务描述 用户在sso-resource工程访问我们的资源数据时,获取用户的行为日志信息,然后传递给sso-system工程,将日志信息存储到数据库. 业务架构分析 系统服务中的日志存储设计 本次设计中,系统服务负责将其它服务获取的用户行为日志写入到数据库。 Pojo逻辑实现 定义一个Log对象,用于在内存中存储用户行为日志信息,例如: package com.jt.system.pojo; import com.baomidou.mybatisplus.annota. 阅读详情


1 系统需求分析

1.1 业务描述

用户在sso-resource工程访问我们的资源数据时,获取用户的行为日志信息,然后传递给sso-system工程,将日志信息存储到数据库.

1.2 业务架构分析

在这里插入图片描述

2 系统服务中的日志存储设计

2.1 业务描述

本次设计中,系统服务负责将其它服务获取的用户行为日志写入到数据库。

2.2 Pojo逻辑实现

定义一个Log对象,用于在内存中存储用户行为日志信息,例如:

package com.jt.system.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;

/**
 * 基于此对象封装用户行为日志?
 * 谁在什么时间执行了什么操作,访问了什么方法,传递了什么参数,访问时长是多少.
 */
@Data
@TableName("tb_logs")
public class Log implements Serializable {
    private static final long serialVersionUID = 3054471551801044482L;
    @TableId(type = IdType.AUTO)
    private Long id;
    private String username;
    private String operation;
    private String method;
    private String params;
    private Long time;
    private String ip;
    @TableField("createdTime")
    private Date createdTime;
    private Integer status;
    private String error;
}

2.3 Dao 逻辑实现

第一步:创建用户行为日志数据层对象,用于处理数据持久化逻辑,例如

package com.jt.system.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jt.system.pojo.Log;
import org.apache.ibatis.annotations.Mapper;

/**
 * 用户行为日志数据层对象
 */
@Mapper
public interface LogMapper extends BaseMapper<Log> {
}

第二步:定义单元测试,对数据层方法进行单元测试

package com.jt;

import com.jt.system.dao.LogMapper;
import com.jt.system.pojo.Log;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Date;

@SpringBootTest
public class LogMapperTests {
    @Autowired
    private LogMapper logMapper;
    @Test
    void testInsert(){
        //构建用户行为日志对象(基于此对象存储一些用户行为日志,先用假数据)
        Log log=new Log();
        log.setUsername("lisi");
        log.setIp("192.168.100.200");
        log.setOperation("查询资源");
        log.setMethod("pkg.ResourceController.doSelect");
        log.setParams("");
        log.setStatus(1);
        log.setTime(100L);
        log.setCreatedTime(new Date());
        //将日志持久化到数据库
        logMapper.insert(log);
    }
}

2.4 Service逻辑实现

第一步:定义日志业务接口,例如:

package com.jt.system.service;
import com.jt.system.pojo.Log;
/**
 * 用户行为日志业务逻辑接口定义
 */
public interface LogService {
    /**
     * 保存用户行为日志.
     * @param log
     */
    void insertLog(Log log);
    //.....
}

第二步:定义日志业务接口实现类,例如:

package com.jt.system.service.impl;

import com.jt.system.dao.LogMapper;
import com.jt.system.pojo.Log;
import com.jt.system.service.LogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

@Service
public class LogServiceImpl implements LogService {

    @Autowired
    private LogMapper logMapper;
    /**
     * @Async描述的方法底层会异步执行(不由web服务线程执行,
     * 而是交给spring自带的线程池中的线程去执行)但是@Async注解的
     * 应用有个前提,需要启动类上启动异步执行(添加@EnableAsync注解描述).
     * 优点:不会长时间阻塞web服务(例如tomcat)线程
     */
    @Async
    @Override
    public void insertLog(Log log) {
        logMapper.insert(log);
    }
}

2.5 Controller 逻辑实现

第一步:定义LogController对象,用于实现日志控制逻辑,例如:

package com.jt.system.controller;

import com.jt.system.pojo.Log;
import com.jt.system.service.LogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/log")
public class LogController {
    @Autowired
    private LogService logService;
    @PostMapping
    public void doInsertLog(@RequestBody Log log){
        logService.insertLog(log);
    }
}

第二步:在启动类上增加@EnableAsync注解后,启动服务,基于postman进行访问测试,例如:

{
    "username":"zhangsan",
    "ip":"192.188.188.188",
    "operation":"select resource",
    "method":"pkg.XxxController.select",
    "params":"",
    "time":100,
    "status":1,
    "createdTime":"2023-07-06T19:33:33.911+00:00"
}

在这里插入图片描述

3 资源服务中行为日志操作设计

3.1 业务描述

在不修改目标业务方法代码实现的基础之上,访问目标方法时,获取用户行为日志.

3.2 Pojo逻辑对象定义

定义日志对象,用户封装获取到的用户行为日志,例如:

package com.jt.resource.pojo;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;

/**
 * 基于此对象封装用户行为日志?
 * 谁在什么时间执行了什么操作,访问了什么方法,传递了什么参数,访问时长是多少.
 */
@Data
public class Log implements Serializable {
    private static final long serialVersionUID = 3054471551801044482L;
    private Long id;
    private String username;
    private String operation;
    private String method;
    private String params;
    private Long time;
    private String ip;
    private Date createdTime;
    private Integer status;
    private String error;
}

3.3 切入点注解定义

构建一个自定义注解,名字为RequiredLog,后续会基于此注解描述作为切入点,定义切入点方法.例如:

package com.jt.resource.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 定义RequiredLog注解,通过此注解对需要
 * 进行日志记录的方法进行描述
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface RequiredLog {
    String value() default "";
}

3.4 AOP方式获取并记录日志

定义一个日志切面,基于此切面中的通知方法实现用户行为日志的获取和记录

package com.jt.resource.aspect;

import com.jt.resource.annotation.RequiredLog;
import com.jt.resource.pojo.Log;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.codehaus.jackson.map.ObjectMapper;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import java.lang.reflect.Method;
import java.util.Date;

/**
 * @Aspect 注解描述的类型为一个切面类型,在此类中可以定义:
 * 1.切入点(切入扩展逻辑的位置~例如权限控制,日志记录,事务处理的位置),在
 * @Aspect描述的类中,通常使用@Pointcut注解进行定义.使用切入点描述的方法为切入点方法.
 *
 * 2.通知方法(在切入点对应的目标方法执行前后要执行逻辑需要写到这样的方法中),在
 * @Aspect描述的类中,通过@Before,@After,@Aroud,@AfterReturning,@AfterThrowing
 * 这样的注解进行描述.
 * a: @Before切入点方法执行之前执行
 * b: @After 切入点方法执行之后执行(不管切入点方法是否执行成功了,它都会执行)
 * c: @Aroud 切入点方法执行之前和之后都可以执行(最重要)
 * d: @AfterReturning 切入点方法成功执行之后执行
 * e: @AfterThrowing 切入点方法执行时出了异常会执行
 * 所有的方法都是用于执行业务的,这里的通知方法用于在切入点方法执行之前或之后实现一些拓展业务逻辑
 */
@Aspect
@Component
public class LogAspect {
    /**
     * @Pointcut 通过注解方式定义切入点,此注解中的内容为切入点表达式
     * @annotation 为注解方式的切入点表达式,此方式的表达式为一种细粒度的切入点表达式,
     * 因为它可以精确到方法,例如我们现在使用RequiredLog注解描述方法时,由它描述的方法
     * 就是一个切入点方法.
     */
    @Pointcut("@annotation(com.jt.resource.annotation.RequiredLog)")
    public void doLog(){
        //此方法中不需要写任何内容,只负责承载@Pointcut注解
    }

    /**
     * @Around 注解描述的方法为Aspect中的一个环绕通知方法,在此方法
     * 内部可以控制对目标方法的调用.
     * @param joinPoint 连接点对象,此对象封装了你要执行的切入点方法信息,可以基于
     *           此对象对切入点方法进行反射调用
     * @return 目标执行链中切入点方法的返回值.
     * @throws Throwable
     */
    //@Around("@annotation(com.jt.resource.annotation.RequiredLog)") 如果直接这么写,可以省略都doLog()方法的定义
    @Around("doLog()")
    public Object doAround(ProceedingJoinPoint joinPoint)throws Throwable{
        int status=1;//状态
        String error=null;//错误信息
        long time=0l;//执行时长
        long t1=System.currentTimeMillis();
        try {
            //手动调用目标执行链(这个执行链中包含切入点方法~目标方法)
           Object result = joinPoint.proceed();
           long t2=System.currentTimeMillis();
           time=t2-t1;
           return result;
        }catch (Throwable e){
           long t3=System.currentTimeMillis();
           time=t3-t1;
           status=0;
           error=e.getMessage();
           throw e;
        }finally {
           saveLog(joinPoint,time,status,error);
        }
    }
    //存储用户行为日志
    private void saveLog(ProceedingJoinPoint joinPoint,long time,
                         int status,String error)throws Throwable{
        //1.获取用户行为日志
        //1.1获取目标对象类型(切入点方法所在类的类型)
        Class<?> targetClass = joinPoint.getTarget().getClass();
        //1.2.获取目标方法
        //1.2.1获取方法签名(包含方法信息,....)
        MethodSignature signature = (MethodSignature)joinPoint.getSignature();
        //1.2.2获取方法对象
        Method targetMethod=
                targetClass.getDeclaredMethod(signature.getName(),signature.getParameterTypes());
        //1.3获取方法上的RequiredLog注解内容
        //1.3.1获取目标方法上注解
        RequiredLog requiredLog=targetMethod.getAnnotation(RequiredLog.class);
        //1.3.2获取注解中的内容(这个内容为我们定义的操作名)
        String operation=requiredLog.value();
        //1.4获取目标方法名(类名+方法名)
        String targetMethodName=targetClass.getName()+"."+targetMethod.getName();
        //1.5获取目标方法执行时传入的参数
        String params=new ObjectMapper().writeValueAsString(joinPoint.getArgs());
        //1.6获取登录用户名(参考了Security官方的代码)
        String username=(String)
                SecurityContextHolder.getContext()
                        .getAuthentication()
                        .getPrincipal();
        //1.7获取ip地址(从当前线程获取request对象,然后基于request获取ip地址)
        //String ip="192.168.1.100";
        ServletRequestAttributes requestAttributes =
        (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        String ip=requestAttributes.getRequest().getRemoteAddr();
        //2.将用户行为日志,封装到Log对象
        Log logInfo=new Log();
        logInfo.setIp(ip);//后续获取
        logInfo.setUsername(username);
        logInfo.setOperation(operation);
        logInfo.setMethod(targetMethodName);
        logInfo.setParams(params);
        logInfo.setTime(time);
        logInfo.setStatus(status);
        logInfo.setError(error);
        logInfo.setCreatedTime(new Date());
        System.out.println("logInfo="+logInfo);
    }

}

3.5 启动服务进行访问测试

在ResourceController类中,使用我们自己定义的注解后,依次启动nacos,sso-system,sso-auth,sso-resource,sso-gateway,sso-ui工程服务,然后执行登陆,登陆成功后查询我的资源,检测日志输出。
在这里插入图片描述

3.6 服务中AOP技术应用原理分析

AOP是一种设计思想,它要实现的功能就是"锦上添花",就是在尽量不修改原有目标方法的基础上,添加一些扩展功能,例如日志的记录,权限的控制,事务的控制,异步任务的执行等等,其应用原理如图所示:
在这里插入图片描述
说明:当我们在项目中定义了AOP切面以后,系统启动时,会对有@Aspect注解描述的类进行加载分析,基于切入点的描述为目标类型对象,创建代理对象,并在代理对象内部创建一个执行链,这个执行链中包含拦截器(封装了切入点信息),通知(Around,…),目标对象等,我们请求目标对象资源时,会直接按执行链的顺序对资源进行调用。

3.7 Feign方式将日志传递给系统服务

第一步:确保sso-resource工程中添加了openfeign依赖,例如:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

第二步:确保sso-resource工程的启动上添加了@EnableFeignClients注解,例如:

package com.jt;

@EnableFeignClients
@SpringBootApplication
public class ResourceApplication {
    public static void main(String[] args) {
        SpringApplication.run(ResourceApplication.class, args);
    }
}

第三步:定义日志远程服务调用接口,例如:

package com.jt.resource.service;
import com.jt.resource.pojo.Log;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

@FeignClient(value = "sso-system",contextId = "remoteLogService")
public interface RemoteLogService {
     @PostMapping("/log")
     public void insertLog(@RequestBody Log log);
}

第四步:在LogAspect类中注入RemoteLogService对象,并通过此对象将日志对象传递到sso-system服务

@Autowired
private RemoteLogService remoteLogService;

在这里插入图片描述

第五步:依次启动服务进行访问测试。

09-SSO微服务工程中用户行为日志的记录(2107~2108~2109~2110) 说明:当我们在项目中定义了AOP切面以后,系统启动时,会对有@Aspect注解描述的类进行加载分析,基于切入点的描述为目标类型对象,创建代理对象,并在代理对象内部创建一个执行链,这个执行链中包含拦截器(封装了切入点信息),通知(Around,…依次启动nacos,sso-system,sso-auth,sso-resource,sso-gateway,sso-ui工程服务,然后执行登陆,登陆成功后查询我的资源,检测日志输出。2)通知方法(在切入点对应的目标方法执行前后要执行逻辑需要写到这样的方法中),在。 阅读详情

相关推荐

微服务版工程日志记录(AOP记录操作日志(笔记))

文章目录基于AOP(面向切面)记录操作日志一 、系统服务中的日志存储设计pojo 逻辑实现dao 逻辑实现创建测试类测试将日志持久化到数据库service 逻辑实现controller 逻辑实现二 、资源服务日志的获取AOP方式获取日志feign方式传递日志(传递给system系统服务) 基于AOP(面向切面)记录操作日志 一 、系统服务中的日志存储设计 pojo 逻辑实现 创建Log对象,基于此对象封装用户行为日志 package com.jt.system.pojo; import com.baomi

m0_55588226的博客 3533

09-SSO微服务工程中用户行为日志的记录

文章目录系统服务中的日志存储设计Pojo逻辑实现Dao 逻辑实现Service逻辑实现Controller 逻辑实现资源服务中日志的获取AOP方式获取日志Feign方式将日志传递给系统服务 系统服务中的日志存储设计 Pojo逻辑实现 定义一个Log对象,用于在内存中存储用户行为日志信息,例如: package com.jt.system.pojo; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisp

雨田说码 1万+

<Verilog实现除法器> Verilog实现牛顿-拉夫逊(Newton-Raphson)除法器

阿斯顿阿斯顿啊啊是打发士大夫

IC跳跳鱼的博客 3572

用户行为日志的记录

在用户访问商品信息时,记录谁在什么时间,执行了什么操作,访问了什么方法,传递了什么参数,耗时是多少,最后的状态是成功还是失败,假如失败了,其具体错误信息是什么?

2201_75382167的博客 1518

Cisco三层交换机的详细配置

** 本文适用于新手小白以及微微基础的同学来用于参考,实验是在Cisco Packet Tracer Student 进行,实验最终效果如图所示,所有命令配置与图中的一致。 使用到的机器型号为:五台电脑,一台服务器,三个普通交换机(2960型号),一个三层交换机(3560-24PS),两台普通服务器(2811) 文章目录一、什么是三层交换机二、配置交换机步骤1.配置二层交换机2.配置三层交换机3.配置两台路由器以及最后一台电脑 一、什么是三层交换机 1.三层交换机 = 三层路由+二层交换机 2.工作在

真正的大师,永远都怀着一颗学徒的心。 4万+

ENVI5.6 自动化流程:GF系列卫星影像批处理与质量优化

本文详细介绍了如何利用ENVI5.6构建针对GF-2、GF-6、GF-7系列卫星影像的自动化批处理流水线。通过配置Batch Processing工具,实现从正射校正到图像融合的全流程批量处理,并分享参数设置、质量监控与故障排查的实战经验,旨在显著提升海量遥感影像的处理效率与成果质量。

efc1234567的博客 599

小研究 - 一种复杂微服务系统异常行为分析与定位算法(一)

小研究 - 一种复杂微服务系统异常行为分析与定位算法(一)

2134

C#教程

C# 教程 C# 是一个简单的、现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的。 本教程将告诉您基础的 C# 编程,同时将向您讲解 C# 编程语言相关的各种先进理念。 现在开始学习 C#! C# 在线工具 谁适合阅读本教程? 本教程有助于初学者理解基础的 C# 编程。在学习完本教程后,您将到达一个中级的 C# 编程水平。

zm1_1zm 1万+

续sso单点登录及日志记录

SSO单点登录系统进阶实现 核心知识点 认证服务器(sso-auth)中Token设计(UUID令牌,JWT令牌) 认证服务器(sso-auth)中Oauth2规范基本配置(认证入口-/oauth/token,为谁认证,由谁认证,认证后颁发什么令牌) 基于Postman,Http-Client工具进行认证测试?(请求方式,请求url,认证参数) 资源服务器(sso-resource)核心业务分析及认证,授权规则设计及实现(匿名,认证,鉴权/授权) API网关工程设计及实现(所有外部请求对内部资源的访问入

weixin_55026035的博客 617

从Gotham到Foundry:拆解Palantir三大产品线,看它如何用‘本体’统一企业数据与AI

本文深入解析Palantir的三大产品线Gotham、Foundry和Apollo,揭示其如何通过独特的'本体'架构实现企业数据与AI的无缝融合。从国防情报到商业决策,Palantir的产品架构展现了强大的数据整合与AI赋能能力,为企业构建数字孪生提供革命性解决方案。

weixin_30823001的博客 312

RT-DETR改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

1️⃣本专栏已更新260多种不同的改进方法,所使用并改进的每一个模块均包含详细的模块分析、原理讲解、个人总结、多种改进方式以及完整的修改流程,所有改进100%可直接运行。2️⃣所有改进点均为近三年顶会,顶刊提出的先进算法,将其融入到中,紧跟学术热点,适应不同的任务场景。3️⃣团队内发表数篇SCI论文,熟悉完整的发表流程,订阅专栏即可进群享受模型训练、模型改进、论文写作、投稿选刊,从入门到论文的各种答疑内容。4️⃣专栏内容会持续更新,最近更新时间:2024-12-4。项目介绍在大家购买专栏后,加入学习

Limiiiing的博客 2万+

1、电商数仓(用户行为采集平台)

电商数仓(用户行为采集平台)

一无所知的世界,走下去才有惊喜。让我们永远相信美好的事情即将发生,成为比昨天更优秀的自己。 1295

假新闻检测论文分享(17)CAFE(Cross-modal Ambiguity Learning for Multimodal Fake NewsDetection)

本文首先从信息论的角度对跨模态歧义性学习问题进行形式化描述,利用不同单模态特征之间的分布散度量化其歧义性;然后,提出了一种模糊度感知的多模态假新闻检测方法CAFE。CAFE通过自适应地聚合单模态特征和跨模态关联,即在跨模态歧义性较弱时依赖单模态特征,在跨模态歧义性较强时参考跨模态关联,从而提高假新闻检测精度。提出了跨模态歧义学习问题,这是多模态假新闻检测的一个关键挑战,并提出了一种基于KL散度的方法,通过估计其特征分布的散度来量化文本和图像之间的歧义。

weixin_41964296的博客 1714

10-SSO微服务工程中用户行为日志的记录

目录 系统需求分析 业务描述 业务架构分析 系统服务中的日志存储设计 业务描述 Pojo逻辑实现 Dao 逻辑实现 Service逻辑实现 Controller 逻辑实现 资源服务中行为日志操作设计 业务描述 Pojo逻辑对象定义 切入点注解定义 AOP方式获取并记录日志 启动服务进行访问测试 服务中AOP技术应用原理分析 Feign方式将日志传递给系统服务 系统需求分析 业务描述 用户在sso-resource工程访问我们的资源数据时,获取用户的行为日志信息,然

空城的博客 451

开源项目-智能算法中台管理系统

智能算法中台管理系统,系统主要有样本中心,算法中心,模型中心等模块

u010479989的博客 2983

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SSO微服务用户行为日志记录

文章目录系统需求分析业务描述业务架构分析系统服务中的日志存储设计业务描述Pojo逻辑实现Dao 逻辑实现Service逻辑实现Controller 逻辑实现资源服务中行为日志操作设计业务描述Pojo逻辑对象定义切入点注解定义启动服务进行访问测试服务中AOP技术应用原理分析Feign方式将日志传递给系统服务 系统需求分析 业务描述 用户在sso-resource工程访问我们的资源数据时,获取用户的行为日志信息,然后传递给sso-system工程,将日志信息存储到数据库. 业务架构分析 系统服务中的日志存储设

m0_48102416的博客 302

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

续sso单点登录-微服务工程中用户行为日志的记录

续单点登录sso微服务之日志管理

weixin_55026035的博客 458

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

07-SSO微服务工程中用户行为日志的记录

系统需求分析 业务描述 用户在sso-resource工程访问我们的资源数据时,获取用户的行为日志信息,然后传递给sso-system工程,将日志信息存储到数据库. 业务架构分析 系统服务中的日志存储设计 业务描述 本次设计中,系统服务负责将其它服务获取的用户行为日志写入到数据库。 Pojo逻辑实现 定义一个Log对象,用于在内存中存储用户行为日志信息,例如: package com.jt.system.pojo; import com.baomidou.mybatisplus.annotation.I

qq_61407171的博客 488

微服务版单点登陆系统(SSO)实践

1.单点登陆系统概述 单点登录,英文是 Single Sign On(缩写为 SSO)。即多个站点共用一台认证授权服务器,用户在其中任何一个站点登录后,可以免登录访问其他所有站点。而且,各站点间可以通过该登录状态直接交互。 2.单点登陆系统解决方案设计 2.1解决方案一:用户登陆成功以后,将用户登陆状态存储到redis数据库 在这套方案中,用户登录成功后**,会基于UUID生成一个token**,然后与用户信息绑定在一起存储到数据库.后续用户在访问资源时,基于token从数据库查询用户状态,这种方式因为

qq_45932374的博客 2408

微服务版单点登陆系统(SSO)学习

微服务版单点登陆系统(SSO)实践 文章目录微服务版单点登陆系统(SSO)实践一. 单点登陆系统简介1.1 背景分析1.2 单点登陆系统概述1.3 单点登陆系统解决方案设计二. 单点登陆系统初步设计2.1 服务设计2.2 工程结构设计2.3 SSO父工程创建及初始化2.3.1 创建父工程2.3.2 父工程pom文件初始配置三. 系统基础服务工程设计及实现3.1 业务描述3.2 表结构设计3.3 工程数据初始化3.4 创建系统服务工程并初始化3.5 Pojo对象逻辑实现3.6 Dao对象逻辑实现3.7 Ser

SS_Strive_SS的博客 2025

微服务-11-sso(4)网关,UI工程,日志记录

文章目录总结UI工程页面设计为什么网关层面要做跨域设计?system工程如何记录用户行为日志?系统工程中的用户行为日志来自哪里?资源服务器通过什么样的方式获取用户行为信息?@Async注解 总结 UI工程页面设计 Bootstrap+Vue+axios。 为什么网关层面要做跨域设计? Ajax技术不支持跨域请求,将所有服务的跨域共性提取到网关层面。 system工程如何记录用户行为日志? 通过异步方式将日志写到数据库,需要两注解@EnableAsync,@Async。 系统工程中的用户行为日志来自哪里? 来

老汤姆的博客 330

2111-微服务核心知识点及问题分析

文章目录Day01~微服务架构入门核心知识点常见问题分析常见Bug分析课堂练习课后作业 Day01~微服务架构入门 核心知识点 微服务架构诞生的背景(软件即服务,将一个大型软件,拆成若干个小系统;分而治之~北京一个火车站到多个火车站) 微服务架构解决方案(大厂基本自研~自己研发各种组件,中小公司用Spring Cloud Netflix,Alibaba,…) 微服务架构下Maven聚合项目的创建方式?(Maven聚合项目~资源复用:extends,import,简化编译,打包,部署方式) 微服务架构入门聚

雨田说码 1万+

SSO单点登陆经验总结(oauth2+springsecurity+jwt)

单点登录,英文是 Single Sign On(缩写为SSO)。即多个站点共用一台认证授权服务器,用户在其中任何一个站点登录后,可以免登录访问其他所有站点。而且,各站点间可以通过该登录状态直接交互。 单点登陆系统解决方案设计 父工程 创建聚合工程父工程添加依赖如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns..

weixin_64742764的博客 1013
上一篇: 1.9 微服务版单点登陆系统(SSO)
下一篇: 1.11 微服务问题分析及总结
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值