Spring Security 中基于用户信息的动态密码加密
Spring Security 中基于用户信息的动态密码加密前言通过自定义 Spring Security 的 DaoAuthenticationProvider,可以实现根据用户信息的不同,动态切换不同的密码加密方式。这种方法允许您根据用户的角色、组或其他属性,选择最合适的加密算法,从而提高安全性或满足特定的业务需求。
DaoAuthenticationProviderDaoAuthenticationProvider是用于实现用户名密码的登陆AuthenticationProvider,通过自定义实现additionalAuthenticationChecks方法可以实现从UserDetails获取一个字段从而动态获取密码加密服务。
实现自定义DaoAuthenticationProvider:
1234567891011121314151617181920212223242526272829303132333435363738394041@Componentpublic class HotelerAuthenticationProvider extends DaoAuthenti ...
2024年度总结
2024年度总结对我来说,2024年是一个特别有意义的一年。8月24号,我美丽又可爱的宝宝出生了,体验到了初为人父的喜悦;10月7号,国庆节刚过,公司人事就开邮件通知我我的岗位被取消了。
初为人父的喜悦孩子的出生时间其实挺意外的。由于老婆在9月初有一场很重要的考试,所以不能耽搁,所以原来计划在20号去医院打催产素的,结果因为报告晚了一天,然后就被通知不用打催产素,已经开始见红了。不过开宫口的速度很慢,过两天还是上催产素了。我记得那个时候我在家里呆着,医院我有丈母娘陪着,反正又不可能那么急着生出来,我就回家先好好休息,打算第二天过去。结果第二天我丈母娘就通知我让我赶紧过去签字给我老婆打催产素。一波三折,到最后这个催产素还是打上去了。在6号待产室,晚上6点06分,7斤2两,我可爱的儿子就这样子平平安安的出生了。说实话,我并没有在第一时间听到孩子的哭声,相反这个小家伙睡的死死的。我伸过去看看了他,第一感觉他好丑啊,头型怪怪的,有点拉长的样子。听医生说,刚出生的小宝宝通常产道的挤压,出来的时候头多多少少会有点拉长的样子,等长大点就好了。
孩子的出生,对我来说是一个特殊的人生里程碑,从这一刻开始 ...
script标签中的defer和async
浏览器中script标签中的defer和async有什么区别,优缺点是什么,应用场景是什么?在 HTML 中,<script> 标签的 defer 和 async 属性用于控制脚本的加载和执行方式,尤其是在处理 JavaScript 文件时。它们之间的主要区别和应用场景如下:
1. defer
功能:脚本在文档解析完成后执行,但在 DOMContentLoaded 事件之前执行。
加载顺序:defer 脚本会按照它们在文档中的出现顺序加载并执行。
应用场景:适用于依赖于 DOM 完全加载的脚本,或者需要按顺序执行多个脚本的情况。
优点:
确保 DOM 元素在脚本执行时已存在,避免了因元素未加载而导致的错误。
不会阻塞 HTML 的解析,可以提高页面加载性能。
示例:12<script src="script1.js" defer></script><script src="script2.js" defer></script>
2. async
功能:脚本会在下载完成后立即执行,而 ...
css的模拟面试
css变量是什么CSS 变量(也称为自定义属性)是 CSS 中用于定义可重用值的特性。它们使用 -- 前缀定义,可以在整个样式表中被引用和复用,从而提高代码的灵活性和可维护性。
1. 定义 CSS 变量CSS 变量通常在 :root 选择器中定义,这样它们可以在整个文档中使用:
12345:root { --primary-color: #3498db; --font-size: 16px; --spacing: 1rem;}
以上定义的 --primary-color、--font-size 和 --spacing 就是 CSS 变量。
2. 使用 CSS 变量CSS 变量使用 var() 函数进行引用:
12345button { background-color: var(--primary-color); font-size: var(--font-size); padding: var(--spacing);}
在这里,var(--primary-color) 引用了之前定义的变量 --primary-color 的 ...
nodejs的模拟面试
CommonJS是什么CommonJS(简称CJS)是一种JavaScript模块化规范,最初为在服务端(如Node.js)实现模块化而设计。在CommonJS中,每个文件都被视为一个独立的模块,并通过module.exports导出和require引入其他模块,形成清晰的模块依赖结构。以下是CommonJS的几个关键点:
模块导出和导入:CommonJS使用module.exports导出内容,其他文件使用require导入。例如:
12345678910// 导出模块// math.jsmodule.exports = { add: (a, b) => a + b, subtract: (a, b) => a - b,};// 导入模块const math = require("./math");console.log(math.add(2, 3)); // 输出5
同步加载:CommonJS模块是同步加载的,这在服务端环境中是合理的,因为文件系统通常是本地的,读取速度快。但在浏览器端不适用,因为网络加载是异步的,Co ...
Angular的模拟面试
前言本文是针对angular前端的模拟面试
问题前端CSS的优先级在 CSS 中,选择器用于选择 HTML 元素并应用样式。不同选择器的优先级(权重)决定了样式的应用顺序。以下是常用选择器类型及其优先级规则:
CSS 选择器类型
元素选择器:直接选择 HTML 元素,如 div、p、h1。
类选择器:通过类名选择元素,使用 . 前缀,如 .box。
ID 选择器:通过 ID 名称选择元素,使用 # 前缀,如 #header。
属性选择器:通过元素属性选择元素,如 [type=”text”]。
伪类选择器:选择特定状态的元素,如 :hover、:focus。
伪元素选择器:选择元素的一部分,如 ::before、::after。
组合选择器:通过多种选择器的组合,选择满足特定条件的元素。常见的组合符有:
后代选择器:div p,选择 div 中的所有 p 元素。
子选择器:div > p,选择 div 的直接子元素 p。
相邻兄弟选择器:h1 + p,选择紧跟在 h1 之后的 p 元素。
通用兄弟选择器:h1 ~ p,选择 h1 之后的所有 p 元素。
...
记录一下2024年10月18号和前同事的一次模拟面试
敏捷开发敏捷开发是一种以迭代和增量的方式来开发软件的流程,它注重团队协作、快速反馈以及应对变化的能力。在敏捷开发中,Sprint(冲刺) 是一个核心概念。下面我为你总结了敏捷开发流程中的Sprint、迭代节奏、和时间周期:
1. Sprint(冲刺)
Sprint 是敏捷开发的基础单位,通常是一个固定时间周期,通常为1到4周。
每个 Sprint 都是一个小型迭代周期,在这个周期中,团队需要完成一定数量的工作(通常是具体的功能、用户故事或任务)。
目标是在每个 Sprint 结束时交付一个可工作的产品增量,即使不一定是完整产品,也应该是能够演示或发布的可用功能。
2. 迭代节奏敏捷开发的迭代节奏是基于 Sprint 的。团队会按照以下步骤循环进行开发:
Sprint 计划会议(Sprint Planning):
在每个 Sprint 开始时,团队会召开计划会议,确定当前 Sprint 的目标和待完成的任务。这些任务一般从产品待办事项列表(Product Backlog)中选取,并拆分成更小的用户故事(User Stories)或任务(Tasks)。
团队会评估每个任务的工作量,并 ...
JavaScript中的闭包
定义闭包(closure)是一个函数以及其捆绑的周边环境状态(lexical environment,词法环境)的引用的组合。换而言之,闭包让开发者可以从内部函数访问外部函数的作用域。在 JavaScript 中,闭包就是能够读取其他函数内部变量的, 闭包会随着函数的创建而被同时创建。
作用
本部分例子来自chatgpt
创建私有变量
1234567891011function createCounter() { let count = 0; return function() { count++; return count; };}const counter = createCounter();console.log(counter()); // 输出 1console.log(counter());
保持函数执行上下文
12345678910function outer() { let name = "John"; return functio ...
使用docker-compose备份Postgres Docker容器的解决方案
使用docker-compose备份Postgres Docker容器的解决方案备份使用pg_dumpall命令备份Postgres数据库。
1docker-compose exec <postgres_service> pg_dumpall -U postgres > dump_`date +%Y-%m-%d"_"%H_%M_%S`.sql
docker-compose exec <postgres_service> 在名为<postgres_service>的Postgres容器上执行命令。
-U postgres 指定数据库的用户名。Docker的默认用户名是postgres,如果你使用不同的用户名,请进行修改。
恢复将dump_date +%Y-%m-%d”“%H%M_%S.sql文件放置在backup文件夹中。
然后使用Docker卷将backup文件夹绑定到Postgres容器上:
12volumes: - ./backup:/backup
删除现有的Postgres容器并创建一个新的容器:
1do ...
如何在10分钟内使用LangChain
如何在10分钟内使用LangChainLangChain是一个强大的Python和Javascript/Typescript库,它可以让你快速地原型化大型语言模型应用。它允许你将LLM任务链在一起(因此得名),甚至可以让你快速轻松地运行自主代理(autonomous agents)。今天,我们将介绍chain的基础知识,这样你就可以立即开始你最新的LLM项目。
前言本文主要讨论了LangChain的使用和优势。LangChain是一个对于希望快速创建大型语言模型应用的人来说非常有用的工具。它可以在几分钟内创建链、定义提示,甚至将多个LLM调用链接在一起以创建动态的TikTok脚本。
LangChain的优势在于其简单性和灵活性。无论你是经验丰富的开发者还是刚刚起步,LangChain的直观设计都让你能够像从未有过的那样利用大型语言模型的能力。从生成创意内容到运行自主代理,可能性是无穷无尽的。
此外,如果你正在寻找将AI集成到你现有的工作流程或产品中,TimeSurge Labs可以提供帮助。他们专注于AI咨询、开发、内部工具和LLM托管,他们的团队致力于构建AI的未来,并帮助 ...