当前位置: 首页 > news >正文

技术日志2023-5-18

1、Java远程调试

可参考:https://kefeng.wang/2018/03/06/idea-remote-debug/

2、用户中心这样的基础项目有什么用,感觉非常鸡肋。

今天开发讨论中涉及到了用户中心,感觉在项目中使用用户中心只是给业务系统发一个token,业务系统还需要自己做权限校验。
而且用户中心作为一个通用组件,还不能和业务系统强关联,在用户中心增加一个用户,还不能同步到业务系统。
用户中心能做的,业务系统也都可以做,而且也没有很多的工作量。

所以请教了一下ChatGPT,回答如下:

问:系统设计中为什么会有用户中心这种基础项目

答:用户中心是系统设计的一个基础项目,因为它涉及到用户信息、安全性、权限管理等核心问题。
首先,用户中心是系统中存储用户信息的重要组件,包括用户账户、密码、个人资料等。这些信息需要得到妥善的处理,防止被恶意攻击者盗取或篡改,以保证用户账户的安全性。
其次,用户中心还需要实现用户权限管理,在系统中进行访问控制,以确保用户访问系统时只能看到和操作它们被授权的部分。这也对系统的安全性和完整性至关重要。
最后,用户中心在交互设计和用户体验方面也非常重要。用户中心应该被设计成一个易于使用且符合用户期望的界面,充分考虑到用户习惯和心理需求,以提高用户对系统的依赖性和使用率。
总之,用户中心在系统设计中的重要性不言而喻,是保证系统的完整性和安全性的基础组件之一。

问:使用用户中心后项目还需要自己做权限校验吗

答:使用用户中心后,项目仍需要进行权限校验。尽管用户中心负责管理和维护用户的登录和基本信息,它并不负责应用程序级别的权限管理。
应用程序级别的权限管理是指控制用户可以访问和执行哪些功能、数据等等的授权。这通常需要在系统代码中实现,并在应用程序的操作中进行权限校验。只有在用户经过了应用程序级别的权限校验后,才可以执行所请求的操作。
用户中心通常只负责提供基本的安全机制,如认证、授权和会话管理。它并不负责应用程序的业务逻辑和权限细节,这些都需要应用程序自行处理。因此,即使使用了用户中心,应用程序仍然需要进行权限管理和校验,来确保系统的安全性和可靠性。

问:用户登录后每次请求还需要过一下用户中心吗

答:用户中心和业务系统都是独立的服务。当用户访问业务系统时,业务系统需要进行身份认证,并从用户中心获取身份信息的验证结果,以确保用户已经通过了有效的身份验证,并具有执行相应操作的授权。
具体来说,当用户进行身份验证并登录之后,在用户中心生成一个与该用户相关的会话标识(如令牌或会话 ID),该会话标识与用户的身份信息相关联,然后将该会话标识返回给用户。
当用户访问业务系统时,业务系统需要获取该会话标识,并将其发送到用户中心进行身份验证。如果会话标识有效并且与已登录用户的身份信息匹配,用户中心会返回验证通过的信息给业务系统。业务系统将使用该信息进行权限校验,并执行用户请求的操作。如果会话标识无效或过期,用户中心将返回未通过验证的信息,并要求用户重新进行身份验证。
因此,每次用户请求业务系统时,都需要先将会话标识发送到用户中心进行身份验证,以确保用户的请求得到有效认证和授权,从而保证系统的安全性和可靠性

问:那这样不会有性能问题吗

答:对于用户中心和业务系统之间的身份验证和授权,确实会增加一定的网络延迟和系统开销,但这种开销通常是可以管理和优化的。
以下是一些可能的优化措施:
使用跨域认证标准 (如 OAuth):这可以使用户中心和业务系统之间的认证更加简单和高效,从而降低身份验证的网络延迟和处理时间。
使用缓存:将用户会话信息缓存在应用程序的内存中或使用分布式缓存(如 Redis) 可以减少每个请求中对用户中心的调用次数和网络延迟。
使用身份验证代理:这是一种专门用于集成和管理多个可信身份验证系统的软件。它可以实现在业务系统中自动选择和调用可用的身份验证源,从而简化和加速身份验证的处理过程。身份验证代理还可以提供额外的安全功能,如 IP 地址过滤、防火墙以及访问速率限制等。
优化硬件和网络:加强硬件设备和网络等基础设施的处理能力,增加机器的数量,配备更强劲的服务器设备,从而提高系统的性能和并发处理能力。
总之,虽然每次请求都需要进行身份验证和授权,但是通过上述方式,可以最大限度地降低身份验证和授权之间的延迟和处理时间,并提高系统的性能、稳定性和安全性。

问:那用户中心会返回给业务系统那些数据呢

答:当用户中心完成身份认证并对业务系统进行授权后,会将授权信息返回给业务系统。这些返回信息一般包括以下几个方面:
用户身份信息,包括用户id、用户名、用户角色等。
认证令牌或会话 ID 等信息,用于在后续请求中标识该用户的身份。
授权信息,比如用户所拥有的角色,用户可以访问的业务系统资源等。
认证/授权过程中所使用的密钥、证书等,以保证身份认证和授权的安全性。
其他有关用户身份验证和授权的相关信息和元数据,比如过期时间、访问时间、访问次数等。
这些信息将帮助业务系统判断用户身份,验证用户是否有权限请求相关资源或执行相应的操作,从而确保业务系统的数据和功能的安全性和可靠性。

问:如果用户属于多个部门,用户可以切换登录部门,是用户中心做还是业务系统做

答:多部门切换登录的功能可以由用户中心来实现。当用户在多个部门中有权限时,用户中心可以获取用户的部门信息,从而展示不同部门的资源,或者提供切换部门的选项,让用户选择要登录的部门。
用户中心将负责将用户信息和部门信息保存在会话中,并将用户的请求路由到相应的业务系统中。当用户选择切换部门时,用户中心会更新当前用户的会话信息,以反映用户所选择的新部门。这个过程几乎是透明的,用户无需在业务系统之间重新登录或输入身份信息。只需单击一下页面上的“切换部门”按钮,就可以切换到不同的部门,或者在不同部门的业务系统之间切换。
为了实现这个功能,业务系统也需要修改其用户认证和授权逻辑,以支持用户中心传递过来的部门信息,并根据部门信息过滤相关的业务数据或操作。但是这些业务逻辑的实现,是业务系统应该考虑的问题。用户中心可以提供一些 API 或 SDK,以方便业务系统集成多部门切换登录的功能。

问:用户中心支持用户拥有多个角色,用户属于多个部门,这样的表关系如何设计

答:对于这样的场景,我们通常采用以下两个表进行设计:

  • 用户表(User Table):用来存储用户的基本信息,比如用户ID,用户姓名,登录名,密码等等。

  • id:用户唯一标识符。

  • name:用户姓名。

  • login_name:用户登录名。

  • password:用户密码。

  • 用户-部门-角色 关联表(User-Department-Role Association Table):用来存储用户所属部门和角色的关系,一个用户可以属于多个部门,可以拥有多个角色。

  • id:关联表唯一标识符。

  • user_id:用户表中的id,表示该关联信息属于哪个用户。

  • department_id:部门表中的id,表示该关联信息属于哪个部门。

  • role_id:角色表中的id,表示该关联信息属于哪个角色。

关联表中的 user_id, department_id 和 role_id 通常都是外键,它们与各自对应的表中的主键相对应。

这样设计的好处是可以灵活的解决多角色和多部门的问题,用户可以通过关联表来建立和多个角色和多个部门之间的关联关系。同时,如有需要也可以建立用户表和角色表、部门表之间的关联关系,实现高效的权限分配和管理。

问:在用户中心增加一个用户,是否需要同步到业务系统

答:增加一个新的用户后,业务系统需要获取这个新用户的身份信息和授权信息,才能对其完成业务操作。因此,用户中心需要将这个新用户的身份信息以及相应的授权信息同步给业务系统。
注意,这里所提到的同步不是简单的将数据复制到业务系统中,而是实现一种基于统一身份和授权的身份验证和授权机制。用户中心和业务系统之间需要建立一定的身份认证和授权模型,用户中心将负责在用户认证授权过程中与业务系统通信,以实现身份验证和授权的安全性和可靠性。
在具体操作过程中,当用户中心增加一个新的用户时,它会将该用户的身份信息和授权信息保存在自己的数据库中,并通知业务系统进行同步。业务系统在接收到通知后,将获取新用户的身份信息和授权信息,以便决定该用户是否有访问系统资源的权限。
当然,具体的同步策略和方法,需要根据业务系统的需求和特点而定。但是总的来说,用户中心和业务系统建立一种基于统一身份和授权的身份验证和授权机制是非常必要的,这将有利于提高系统的安全性和可靠性,同时也能满足更多的商业需求。

问:这个同步操作时通过消息队列吗

答:可以使用消息队列来实现用户中心和业务系统之间的同步操作。
消息队列是一种异步通信模式,有利于解耦和异步处理,可以帮助解决不同系统之间的纵向和横向扩展问题。在这里,消息队列可以用来协调用户中心和业务系统之间的通信,以确保信息的可靠传递和处理。
当用户中心增加一个新的用户时,可以将该用户的相关信息写入消息队列,然后业务系统在接收到消息后,从消息队列中读取该信息以便进行后续的同步操作。另外,在完成同步操作后,业务系统也可以将执行结果写入消息队列,以便用户中心重新获取处理结果,这将确保整个同步过程的可靠性和可控性。
使用消息队列的好处是,可以支持异步处理,从而减轻系统负担,提高系统的稳定性和弹性。同时,还可以提高系统的并发性和可扩展性,从而支持更大的业务流量。但是,也需要注意消息队列的安全和性能问题,避免出现性能瓶颈和安全漏洞。

问:还有什么同步方式呢

答:除了使用消息队列,还有一些其他的同步方式可以用来实现用户中心和业务系统之间的同步操作。比如直接使用REST API、定时任务同步和基于SDK的同步等等。根据不同的业务场景和需求,可以选择不同的同步方式,进行灵活的部署和使用。

3、新增司机所想到的问题

业务场景是这样的:

每一个司机都有自己唯一的档案信息(手机号、身份证号、驾驶证照片等),然后司机可以绑定到多个部门下。
新增司机的时候,如果司机档案信息不存在,则新增档案信息并且绑定到当前部门下,如果司机档案信息存在,则司机的档案信息回写到前端界面,然后保存操作只是将司机和当前部门进行关联。

问题是:

这样回写就容易暴露司机的信息,司机误输了手机号有可能刚好拿到别人的信息回写过来。

思考:
1、不影响,因为增加司机到当前部门本来就是管理员的操作,管理员本来就可以看到所有司机信息。
2、回写过来的信息如果不清除,那么用户很有可能会偷懒,只改部分信息提交。
3、如果用户已经填了一部分数据了,然后回写会将用户填的数据都覆盖,这样用户白写了。

4、写代码的思考

代码尽可能只写一份,不要因为别的地方要用而copy一下,通用的代码尽量抽出来写成方法。不然后面发生修改的时候非常容易漏改一些代码。

5、关于系统的想法

系统的设计应该是尽可能让上游操作保证一些规范,例如某某数据正常操作是一定会有的,那下游操作就可以减少很多处理了。不然代码越写越难,什么都不确定了,可能性就变多了,代码也更难了。

相关文章:

技术日志2023-5-18

1、Java远程调试 可参考:https://kefeng.wang/2018/03/06/idea-remote-debug/ 2、用户中心这样的基础项目有什么用,感觉非常鸡肋。 今天开发讨论中涉及到了用户中心,感觉在项目中使用用户中心只是给业务系统发一个token,业务系…...

JUC之锁

公平锁、非公平锁 公平锁指的是多线程按照申请锁的顺序来获取锁; 非公平锁指的是多线程不按照申请锁的顺序来获取锁。可能会出现优先级反转(后者居上) 公平锁为了保证线程申请顺序,势必要付出一定的性能代价,因此其吞…...

C++中的 cout 和 printf 用法

文章目录 前言cout & printfexampleprintf输出string字符串总结 前言 C是一种面向对象的编程语言,它继承了C语言的特点,同时也增加了许多新的特性。在C中的cout 和 printf是两种常用的输出函数,它们都可以将数据显示在屏幕上&#xff0c…...

Maven基础使用

Maven 学习目标 理解Maven的用途掌握Maven的基本操作掌握Maven如何创建Web项目 Maven是什么 面临问题 在学习Maven之前,我们先来看一下我们现在做的项目都有哪些问题。假设你现在做了一个crm的系统,项目中肯定要用到一些jar包,比如说myb…...

【C++ 入坑指南】(06)运算符

文章目录 一、算术运算符二、赋值运算符三、比较运算符四、逻辑运算符五、算法题5.1、拆分位数 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 内置了丰富的运算符,并提供了以下类型的运算符: 运算符类型作用算术运算符用于处理四则运算赋值…...

了解一下js中的函数式编程

js中的函数式编程是一种编程范式,它将函数作为一等公民来使用。 在函数式编程中,函数是一种特殊的对象,可以赋值给变量、作为参数传递给其他函数、或作为其他函数的返回值。 函数式编程强调了函数的纯函数性,即函数输入相同时&a…...

动态HTTP代理在linux里的使用

动态HTTP代理是一种可以自动切换代理IP地址的代理方式,可以有效地绕过一些限制访问的网站。在Linux系统中,可以使用Privoxy和Proxychains来实现动态HTTP代理。 以下是在Linux中使用动态HTTP代理的步骤: 1. 安装Privoxy和Proxychains 在终端中…...

软考证书值得考吗?怎么考?

软考证书是什么?有什么用处?必须先明确这两个问题,才能有复习和考取的动力。怎么考过?这是第二步要着重解决的问题。今天详细帮助大家分析一下。 软考是国家级考试,具有强大的权威性与公信力。 软考全称为计算机技术…...

超级秘密文件夹忘记密码的解决办法

超级秘密文件夹是一款非常特殊的文件夹加密软件,它来无影去无踪,在安装后不会留下任何痕迹,只能通过软件热键才能打开。那么如果在使用过程中忘记了密码,这时我们该怎么办呢?下面我们就来了解一下。 首先,我…...

脑的物理系统

⼤脑模块化 人脑是一个复杂的网络,一般将大脑划分为不同的区域(即节点),并使用某种方法表征大脑区域之间的关系(即连接的边)来构建人脑网络。在功能磁共振成像(fMRI)数据的网络模型…...

1054. 距离相等的条形码(leetcode,堆问题,priority_queue)-------------------c++实现

1054. 距离相等的条形码(leetcode,堆问题,priority_queue)-------------------c实现 题目表述 在一个仓库里,有一排条形码,其中第 i 个条形码为 barcodes[i]。 请你重新排列这些条形码,使其中任意两个相…...

QT开发实战-动态壁纸软件

动态壁纸软件开发 项目源代码在下面链接获取: ----------------------------- 开发者:CodeSharkSJ 希望此项目能加强你对Qt的应用 文章目录 项目图与开发环境核心技术原理自定义窗口程序UI布局背景绘制样式表基本实现QWebEngineQMedia使用系统托盘隐藏记忆功能应用程序打包 …...

Netty核心组件模块(一)

1.Bootstrap和ServerBootstrap 1>.Bootstrap意思是引导,一个Netty应用通常由一个Bootstrap开始,主要作用是配置整个Netty程序,串联各个组件,Netty中Bootstrap类是客户端程序的启动引导类,ServerBootstrap是服务端启动引导类; 2>.常见的方法有: ①.public ServerBootstr…...

Robot Framework+Jenkins持续集成UI自动化项目

使用Robot Framework框架可进行Web端和APP端的UI自动化测试,为方便定时执行,可将Robot Framework的自动化项目持续集成至Jenkins平台,具体的操作步骤如下: 安装Jenkins的步骤如下: 手把手教小白安装Jenkins_程序员馨馨…...

【ROS】ROS1编程速览

1、简述 很多项目已经转向ROS2,本人作为ROS小白从ROS1开始学起,但是不会深入学习ROS1,只一带而过。 下面只了解一些ROS1中的概念和基本编程接口。 ROS1中有两种通信模式:话题模式和服务模式,区别如下 2、话题模式 …...

探索智能化:TOOM解析未来稿件校验系统的技术进展与应用展望

在信息时代,随着大数据、人工智能和自然语言处理等技术的快速发展,稿件校验系统正朝着智能化的方向迈进。智能化的稿件校验系统能够更准确、高效地检测虚假信息、抄袭行为以及提升文章质量。本文将探讨智能化稿件校验系统的技术进展与应用展望&#xff0…...

Java程序员从青铜到王者,不同段位的薪资和技能变化

想要薪资高,段位就得跟上,对于Java程序员来说,从青铜到王者,需要经历多个阶段,每个阶段需要掌握的技能都不一样。 今天,我们一起来看看每个段位都有什么特点、需要具备哪些“大杀”技能,也看看…...

tinyWebServer 学习笔记——二、HTTP 连接处理

文章目录 一、基础知识1. epoll2. 再谈 I/O 复用3. 触发模式和 EPOLLONESHOT4. HTTP 报文5. HTTP 状态码6. 有限状态机7. 主从状态机8. HTTP_CODE9. HTTP 处理流程 二、代码解析1. HTTP 类2. 读取客户数据2. epoll 事件相关3. 接收 HTTP 请求4. HTTP 报文解析5. HTTP 请求响应 …...

深入浅析Linux Perf 性能分析工具及火焰图

Perf Event 子系统 Perf 是内置于 Linux 内核源码树中的性能剖析(profiling)工具。它基于事件采样的原理,以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析。可用于性能瓶颈的查找与热点代码的定位…...

java关键术语

java具有11个关键的术语,这些术语是从java的设计者所编写的白皮书中摘取,这些术语分别为:简单性、面向对象、分布式、健壮性、安全性、体系结构中立、可移植性、解释型、高性能、多线程、多态性。以下开始我们将逐一解说这些术语。 一、简单性 Java是C++语法的纯净版本,剔…...

Impromptu VLA:用于驾驶视觉-语言-动作模型的开放权重和开放数据

25年5月来自清华和博世的论文“Impromptu VLA: Open Weights and Open Data for Driving Vision-Language-Action Models”。 用于自动驾驶的“视觉-语言-动作” (VLA) 模型前景光明,但在非结构化极端场景下却表现不佳,这主要是由于缺乏有针对性的基准测…...

网络编程之服务器模型与UDP编程

一、服务器模型 在网络通信中,通常要求一个服务器连接多个客户端 为了处理多个客户端的请求,通常有多种表现形式 1、循环服务器模型 一个服务器可以连接多个客户端,但同一时间只能连接并处理一个客户的请求 socket() 结构体 bind() listen() …...

【产品业务设计】支付业务设计规范细节记录,含订单记录、支付业务记录、支付流水记录、退款业务记录

【产品业务设计】支付业务设计规范细节记录,含订单记录、支付业务记录、支付流水记录 前言 我为什么要写这个篇文章 总结设计经验生成设计模板方便后期快速搭建 一个几张表 一共5张表; 分别是: 订单主表:jjy_orderMain订单产…...

手拉手处理RuoYi脚手架常见文问题

若依前后端分离版开发入门 基础环境:JDK1.8mysqlRedisMavenVue 取消登录验证码 后端 修改ruoyi-ui项目中的login.vue 在ruoyi-ui项目>src>views中找到login.vue文件 1、注释验证码展示及录入部分 2、 注释code必填校验,默认验证码开关为false …...

【LRU】 (最近最少使用)

LRU (最近最少使用) 文章目录 LRU (最近最少使用)一、LRU是什么?二、实现1.常规算法2.双栈更替总结 一、LRU是什么? LRU(Least Recently Used)是一种常见的缓存淘汰策略,核心思想是 “淘汰最长时间未被使用的缓存数据…...

Web后端基础(Maven基础)

https://blog.csdn.net/q20202828/article/details/148459525?spm1001.2014.3001.5501 这是我总结了一下aliyun私服maven依赖配置Maven 3.9.1下载安装的操作 Maven的作用 统一项目结构 Maven 还提供了标准、统一的项目结构 。 1). 未使用Maven 由于java的开发工具呢&#x…...

<2>-MySQL库的操作

目录 一,创建数据库 二,查看字符集和校验规则 三,修改数据库 四,删除数据库 五,备份和恢复数据库 六,查看连接 一,创建数据库 创建一个名为bin_db的数据库,并设置字符集为utf8…...

Unity基础-数学向量

Unity基础-数学向量 二、向量相关用法 概述 向量在Unity游戏开发中扮演着重要角色,用于表示位置、方向、速度等。Unity提供了Vector2、Vector3等结构体来处理向量运算。 1. 向量基础操作 1.1 向量创建和访问 // 创建向量 Vector3 position new Vector3(1, 2,…...

数字证书_CA_详解

目录 一、数字证书简介 二、 CA(证书颁发机构) (一) 证书链(信任链) 1. 根证书 2. 中间证书 3. 网站证书 (二) 抓包软件的证书链与信任机制 1. 抓包通信流程 2. 证书链伪造与信任验证流程 (三) 关于移动设备的CA 一、数…...

C#中的密封类与静态类:特性、区别与应用实例

深入解析两类特殊类的设计哲学与实战应用 在面向对象编程领域中,C#提供了多种特殊的类类型以满足不同设计需求。其中密封类(sealed class)和静态类(static class)是最常用的两种特殊类类型。本文将从设计理念、应用场…...