标签: Spring 全家桶

温酒 | 22小时前 | 后端相关Spring 全家桶

SpringBoot 实现 RAS+AES 自动接口解密

一、讲个事故 接口安全老生常谈了 过年之前做了过一款飞机大战的H5小游戏,里面无限模式-需要保存用户的积分,因为使用的Body传参,参数是可见的。 为了接口安全我,我和前端约定了传递参数是:用户无限模式的积分+“我们约定的一个数字”+用户id的和,在用Base64加密,请求到服务器我再解密,出用户无限模式的积分;如下: {     "integral": "MTExMTM0NzY5NQ ", } 可是过年的时候,运营突然找我说无限模式积分排行榜分数不对: 这就很诡异了,第二名才一万多分,第一名就40多万分!!!! 一开始我以为是我解密有问题,反复看了好几变,可就两三行代码不可能有问题的!!! 没办法我去翻了好久的日志,才发现这个用户把我接口参数给改了。。。。 他把B

 7 |  0 |  0 后端相关Spring 全家桶

晚风 | 22小时前 | 后端相关Spring 全家桶

SpringBoot快速实现 api 加密!

在项目中,为了保证数据的安全,我们常常会对传递的数据进行加密。常用的加密算法包括对称加密(AES)和非对称加密(RSA),博主选取码云上最简单的API加密项目进行下面的讲解。 项目介绍 该项目使用RSA加密方式对 API接口 返回的数据加密,让API数据更加安全。别人无法对提供的数据进行破解。Spring Boot接口加密,可以对返回值、参数值通过注解的方式自动加解密 。 什么是RSA加密 首先我们当然是了解RSA加密 RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥,公钥是公开的(可能同时多人持有)。 举例子大法 加密和签名都是为了安全性考虑,但略有不同。常...

 7 |  0 |  0 后端相关Spring 全家桶

OOM | 3天前 | 后端相关RedisSpring 全家桶

SpringBoot+Redis+定时任务模拟手机短信验证

说明 只是模拟给手机发送短信验证码,并且进行校验 真正能够给手机发送验证码短信还需要结合第三方,如阿里云、讯飞等 需求 发送手机号,返回验证码(6位随机数字) 每个手机号一天只能发送10次(为了测试方便,可以改成3次),每天0点重置次数 当天获取次数达到上限,提示“当天验证码获取次数已达上限,请明天再次使用” 每个验证码有效期为5分钟,获取验证码提示“【XX系统】您的手机验证码为:XXXXXX,有效期5分钟,此功能每天最多获取XX条,请勿向任何人出示,以免账号被盗” 5分钟内再次获取验证码提示“已有可用验证码,XX分XX秒内依然有效” 发送手机号和验证码,对手机号和验证码进行校验,返回验证结果 提示:“验证通过”或“验证失败,请确认手机号或验证码” 代码实现 1.依赖 <dependency     <groupId org.springframework.boot</groupId     <artifactId spring-boot-starter-data-redis</art

 20 |  0 |  0 后端相关Redis

念旧。 | 3天前 | 后端相关Spring 全家桶

Spring中优雅开发的代码技巧

最近越来越多的读者认可我的文章,还是件挺让人高兴的事情。有些读者私信我说希望后面多分享spring方面的文章,这样能够在实际工作中派上用场。正好我对spring源码有过一定的研究,并结合我这几年实际的工作经验,把spring中我认为不错的知识点总结一下,希望对您有所帮助。 一 如何获取spring容器对象 1.实现BeanFactoryAware接口 @Service public class PersonService implements BeanFactoryAware { private BeanFactory beanFactory; @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { this.beanFactory = beanFactory; } public void add() { Person person = (Person) beanF

 18 |  0 |  0 后端相关Spring 全家桶

奈我何 | 1周前 | 后端相关Spring 全家桶

SpringBoot如何保证接口的幂等性?六种方案一次讲清楚~

1. 幂等概述 1.1 深入理解幂等性 在计算机领域中,幂等(Idempotence)是指任意一个操作的多次执行总是能获得相同的结果,不会对系统状态产生额外影响。在Java后端开发中,幂等性的实现通常通过确保方法或服务调用的结果具有确定性,无论调用次数如何,结果都是可预期的。 上面的定义是目前大多数文章和书籍对幂等的描述,然而,在实际的互联网服务开发中,幂等性的理论定义与业务逻辑间的冲突是常见的。 例如,考虑查询操作,当A系统调用B系统的查询接口时,如果首次调用由于B系统中的程序错误而导致业务逻辑失败,即使在程序修复后系统A重新使用相同参数进行重试,B系统可能仍然返回相同的失败响应。尽管这符合幂等性的定义,却与实际业务逻辑不符。同样,以订单支付为例,首次调用由于账户余额不足而返回“余额不足”提示,用户充值后再次使用相同参数发起支付请求,服务仍然返回“余额不足”响应,也符合幂等性的定义,但同样不符合业务逻辑。 因此,在实现幂等性方案时,应该遵循幂等性方案的目标,而不仅仅是严格遵循幂等性的定义。尤其是涉及写操作的服务,应当更关注防止重复请求带来的不良副作用,例如重...

 35 |  0 |  0 后端相关Spring 全家桶

流苏 | 1周前 | 后端相关Spring 全家桶

Spring Boot 实现 热插拔 AOP,非常实用!

现在有这么一个需求:就是我们日志的开与关是交给使用人员来控制的,而不是由我们开发人员固定写死的。大家都知道可以用aop来实现日志管理,但是如何动态的来实现日志管理呢?aop源码中的实现逻辑中有这么一个步骤,就是会依次扫描Advice的实现类,然后执行。我们要做的就是自定义一个advice的实现类然后,在用户想要开启日志的时候就把advice加到项目中来,关闭日志的时候就把advice剔除就行了。 前置知识 Advice: org.aopalliance.aop.Advice “通知”,表示 Aspect 在特定的 Join point 采取的操作。包括 “around”, “before” and “after 等 Advice,大体上分为了三类:BeforeAdvice、MethodInterceptor、AfterAdvice Advisor: org.springframework.aop.Advisor “通知者”,它持有 Advice,是 Spring AOP 的一个基础接口。它的子接口 PointcutAdvisor 是一个功能完善接口...

 30 |  0 |  0 后端相关Spring 全家桶

iron Man | 1周前 | 后端相关Spring 全家桶

有坑别踩!整理Spring事务失效的8种场景~

大家好,今天来聊一个老生常谈的话题,即Spring中事务失效有哪些场景。我这里整理归纳了一下,大概在以下8种场景下事务会不生效。 1. 数据库引擎不支持事务 这里以 MySQL为例,MyISAM引擎是不支持事务操作的,一般要支持事务都会使用InnoDB引擎,根据MySQL 的官方文档说明,从MySQL 5.5.5 开始的默认存储引擎是 InnoDB,之前默认的都是 MyISAM,所以这一点要值得注意,如果底层引擎不支持事务,那么再怎么设置也没有用。 2.没有被 Spring 管理 示例如下: public class OrderServiceImpl implements OrderService{   @Transactional   public void updateOrder(Order order){     //update order   } } 如果此时把@Service注解注释掉,那么这个类就不会被加载成一个Bean,这个类就不会Spring管理了,事务自然就失效了。 3. 方法不是 public 的 @Tra

 37 |  0 |  0 后端相关Spring 全家桶

孤音 | 1周前 | 后端相关Spring 全家桶

Spring Boot 优雅实现多租户架构

一、概述 1 什么是多租户架构? 多租户架构是指在一个应用中支持多个租户(Tenant)同时访问,每个租户拥有独立的资源和数据,并且彼此之间完全隔离。通俗来说,多租户就是把一个应用按照客户的需求“分割”成多个独立的实例,每个实例互不干扰。 2 多租户架构的优势 更好地满足不同租户的个性化需求。 可以降低运维成本,减少硬件、网络等基础设施的投入。 节约开发成本,通过复用代码,快速上线新的租户实例。 增强了系统的可扩展性和可伸缩性,支持水平扩展,每个租户的数据和资源均可管理和控制。 3 实现多租户架构的技术选择 对于实现多租户架构技术不是最重要的最重要的是正确的架构思路。但是选择正确的技术可以更快地实现多租户架构。 二、设计思路 1 架构选型 基于Java开发多租户应用推荐使用Spring Boot和Spring Cloud。Spring Boot能快速搭建应用并提供许多成熟的插件。Spring Cloud则提供了许多实现微服务架构的工具和组件。 1.1 Spring Bo...

 42 |  0 |  0 后端相关Spring 全家桶

蔡文姬 | 2周前 | 后端相关Spring 全家桶

面试官:Spring Boot 中的监视器是什么?不是监听器嘛。。。

面试的时候,被问到 “Spring Boot 中的监视器是什么?有哪些功能和作用?” 我的第一反应就是,不应该是监听器和拦截器吗? 监听器 是基于 观察者模式 的实现,其工作原理是通过注册监听器来订阅特定的事件,当这些事件发生时,Spring框架会通知所有注册了对应事件的监听器,然后监听器会执行相应的操作。 比如初始化数据、读取配置文件、记录日志等。 具体的操作步骤: 1. 定义一个事件类,它需要继承自 ApplicationEvent ; 2. 创建一个监听器类,实现ApplicationListener接口,并指定监听的事件类型; 3. 在监听器类中,可以重写onApplicationEvent方法来定义当事件发生时的具体行为; 4. 将监听器注册到Spring上下文中,这可以通过实现CommandLineRunner接口或者使用@ EventListener 注解来完成。 面试官:我说的是监视器。 很多小伙伴开发多年,确实是没注意过监视器这个概念。 Spring Boot中的监视器是Actuator,我一般用来监控响应时间、CPU使用率、内存使...

 34 |  0 |  0 后端相关Spring 全家桶

布朗熊 | 2周前 | 后端相关Spring 全家桶

SpringBoot 多数据源及事务解决方案

1. 背景 一个主库和N个应用库的数据源,并且会同时操作主库和应用库的数据,需要解决以下两个问题: 如何动态管理多个数据源以及切换? 如何保证多数据源场景下的数据一致性(事务)? 本文主要探讨这两个问题的解决方案,希望能对读者有一定的启发。 2. 数据源切换原理 通过扩展Spring提供的抽象类 AbstractRoutingDataSource ,可以实现切换数据源。其类结构如下图所示: targetDataSources&defaultTargetDataSource 项目上需要使用的所有数据源和默认数据源。 resolvedDataSources&resolvedDefaultDataSource 当Spring容器创建 AbstractRoutingDataSource 对象时,通过调用 afterPropertiesSet 复制上述目标数据源。由此可见,一旦数据源实例对象创建完毕,业...

 40 |  0 |  0 后端相关Spring 全家桶

一纸荒年 | 2周前 | 后端相关Spring 全家桶

三万字盘点Spring最最核心的9大核心功能

这篇文章从前期的选题、准备、翻源码、动手到写完,前后跨度接近一个月的时间,花了好几个周末,写了三万字,最终才算完成 文章很长,我相信你看完之后一定会有所收货 资源管理 资源管理是Spring的一个核心的基础功能,不过在说Spring的资源管理之前,先来简单说一下Java中的资源管理。 Java资源管理 Java中的资源管理主要是通过 java.net.URL 来实现的,通过URL的 openConnection 方法可以对资源打开一个连接,通过这个连接读取资源的内容。 资源不仅仅指的是网络资源,还可以是本地文件、一个jar包等等。 1、来个Demo 举个例子,比如你想到访问 www.baidu.com 这个百度首页网络资源,那么此时就可以这么写 public class JavaResourceDemo {     public static void main(String[] args

 48 |  0 |  0 后端相关Spring 全家桶

晚风 | 2周前 | 后端相关Spring 全家桶

SpringBoot + 事务钩子函数,打造高效支付系统!

前言 经过前面对Spring AOP、事务的总结,我们已经对它们有了一个比较感性的认知了。今天,我继续安利一个独门绝技: Spring 事务的钩子函数。 单纯的讲技术可能比较枯燥乏味。 接下来,我将以一个实际的案例来描述Spring事务钩子函数的正确使用姿势。 一、案例背景 拿支付系统相关的业务来举例。在支付系统中,我们需要记录每个账户的资金流水(记录用户A因为哪个操作扣了钱,因为哪个操作加了钱),这样我们才能对每个账户的账做到心中有数,对于支付系统而言,资金流水的数据可谓是最重要的。 因此,为了防止支付系统的老大徇私舞弊,CTO提了一个流水存档的需求: 要求支付系统对每个账户的资金流水做一份存档,要求支付系统在写流水的时候,把流水相关的信息以消息的形式推送到kafka,由存档系统消费这个消息并落地到库里 (这个库只有存档系统拥有写权限)。 整个需求的流程如下所示: ![2d3f139267df476881827ffe3b637a1e tplv-k3u1fbpfcp-zoom-in-crop-mark 1512 0 0 0.webp](http...

 60 |  0 |  0 后端相关Spring 全家桶

女王范 | 2周前 | 后端相关Spring 全家桶

SpringBoot + 事务钩子函数,打造高效支付系统!

前言 经过前面对Spring AOP、事务的总结,我们已经对它们有了一个比较感性的认知了。今天,我继续安利一个独门绝技: Spring 事务的钩子函数。 单纯的讲技术可能比较枯燥乏味。 接下来,我将以一个实际的案例来描述Spring事务钩子函数的正确使用姿势。 一、案例背景 拿支付系统相关的业务来举例。在支付系统中,我们需要记录每个账户的资金流水(记录用户A因为哪个操作扣了钱,因为哪个操作加了钱),这样我们才能对每个账户的账做到心中有数,对于支付系统而言,资金流水的数据可谓是最重要的。 因此,为了防止支付系统的老大徇私舞弊,CTO提了一个流水存档的需求: 要求支付系统对每个账户的资金流水做一份存档,要求支付系统在写流水的时候,把流水相关的信息以消息的形式推送到kafka,由存档系统消费这个消息并落地到库里 (这个库只有存档系统拥有写权限)。 整个需求的流程如下所示: ![2d3f139267df476881827ffe3b637a1e tplv-k3u1fbpfcp-zoom-in-crop-mark 1512 0 0 0.webp](http...

 58 |  0 |  0 后端相关Spring 全家桶

流苏 | 3周前 | 后端相关JavaSpring 全家桶

利用 Java 反射机制提高 SpringBoot 的代码质量

保持好的代码质量和遵守编码标准是开发可维护和健壮软件的重要方面。在 Spring Boot 应用程序中,确保始终遵循命名约定、代码结构和其他质量标准是一项艰巨的任务,尤其是当项目的复杂性和规模不断扩大时更是如此。 “在本文中,我们将探讨如何使用 Java 反射来提高 Spring Boot 应用程序的代码质量和可维护性。 代码质量的重要性 代码质量不仅仅是个人喜好的问题;它直接影响项目的可维护性、可扩展性和健壮性。代码质量的一致性对于基于团队的开发至关重要,因为它可以促进协作、减少混乱,并使得随着时间的推移更容易管理和发展代码库。 Spring Boot 项目中的痛点问题 Spring Boot 以其强大的功能和灵活性,使开发人员能够构建广泛的应用程序。然而,Spring Boot 极具吸引力的灵活性也可能导致代码质量不一致。开发人员可能会无意中偏离既定的命名约定、项目结构和编码标准。 使用 Java 反射来提高质量 为了解决这些代码质量带来的风险,我们可以利用 Java强大的反射功能来扫描和验证我们的代码库。Java 反射允许我们在运行时检查和操...

 62 |  0 |  0 后端相关Java

孤音 | 3周前 | 后端相关Spring 全家桶

炫技Groovy!SpringBoot中的动态编程实战

Groovy简介 Groovy 是增强 Java 平台的唯一的脚本语言。它提供了类似于 Java 的语法,内置映射(Map)、列表(List)、方法、类、闭包(closure)以及生成器。脚本语言不会替代系统编程语言,两者是相互补充的。 大名鼎鼎的 Gradle,背后是 Groovy。Spring 的未来越来越多的使用 Groovy,甚至在用 Jira 跟踪项目时,背后也有 Groovy。 实际上,就应用场景而言,Java 开发已经有越来越多的 Groovy 出现在后台了。而对于一般的应用开发,只要能用 Java 就都能用到 Groovy,唯一的难点只在于能不能招到足够的人员。 应用场景 连接已有的组件 处理经常变化的多种类型的实体 具有图形化用户界面 拥有快速变化的功能 “注:今天我们分享的就是利用Groovy脚本在SpringBoot项目中实现动态编程,使业务逻辑的动态化,极大地提升了开发效率和灵活性。 集成与使用 那么接下来介绍SpringBoot如何集成Groovy脚本,并应用到实际开发中。 第一步、与Sprin...

 82 |  0 |  0 后端相关Spring 全家桶