Spring Boot

spring boot 对某个接口进行次数限制,防刷。简易版。demo。

家住魔仙堡 提交于 2021-01-30 07:02:15
一般的项目 如果没有做防刷 容易被人爆接口 或者就是说没有做token防刷过滤。 容易被人用正常的token刷接口。有些token非一次性。 用户登录之后生成token会有一个过期时间,但一般没有做频率检查,每访问一次,会延长这个token时间,刷新用户状态 另一种就是养号,拿着真实的token,哪怕你是5分钟 1分钟。 很多的网站找回密码的接口是没有做防刷的,只是检查token是否正常。 通过验证码认证当前用户,是否为当前用户。 前几天,就用多线程刷过一个三方网站的找回密码。成功改掉密码。 一般的网站在改密码的接口都会先查一次此号码是否已经注册,相反就可以通过这个接口猜出真实的用户手机号, 然后多线程调这个接口猜验证码,一般为4位,复杂点的为6位。也会有一些项目加了图形拖拽(第三方) 前端会提交相关信息给第三方平台,分析你是不是正常的用户动作,直接封IP。 但是用户体验差一点,有些网站为了用户体验,忽略了网站安全性,看业务上的取舍了。 进入正题:简易版(demo)   aop 实现 : package com.zhouixi.serviceA.aspect; import java.lang.reflect.Method; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import

Spring Boot 如何使用 Redis 进行 API 防刷限流?

被刻印的时光 ゝ 提交于 2021-01-30 06:55:28
Java技术栈 www.javastack.cn 关注阅读更多优质文章 限流的需求出现在许多常见的场景中: 秒杀活动,有人使用软件恶意刷单抢货,需要限流防止机器参与活动 某api被各式各样系统广泛调用,严重消耗网络、内存等资源,需要合理限流 淘宝获取ip所在城市接口、微信公众号识别微信用户等开发接口,免费提供给用户时需要限流,更具有实时性和准确性的接口需要付费。 API 限流实战 首先我们编写注解类 AccessLimit ,使用注解方式在方法上限流更优雅更方便!Spring Boot 如何集成 Redis 请点击 这里 进行阅读。 三个参数分别代表有效时间、最大访问次数、是否需要登录,可以理解为 seconds 内最多访问 maxCount 次。 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface AccessLimit { int seconds();

Spring Boot项目的接口防刷

落爺英雄遲暮 提交于 2021-01-30 04:30:34
说明:使用了注解的方式进行对接口防刷的功能,非常高大上,本文章仅供参考 一,技术要点:springboot的基本知识,redis基本操作, 首先是写一个注解类: import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.RetentionPolicy.RUNTIME; /** * @author yhq * @date 2018/9/10 15:52 */ @Retention(RUNTIME) @Target(METHOD) public @ interface AccessLimit { int seconds(); int maxCount(); boolean needLogin() default true ; } 拦截器中实现: import com.alibaba.fastjson.JSON; import com.example.demo.action.AccessLimit; import com.example.demo.redis.RedisService; import com

云原生|我对云原生软件架构的观察与思考

夙愿已清 提交于 2021-01-30 03:11:53
作者 | 易立,阿里云资深技术专家,容器技术负责人 本系列文章: 第一篇 - 云原生基础设施 (已发布,文末点击阅读原文查看) 第二篇 - 云原生软件架构(本文) 第三篇 - 云原生应用交付与运维体系(待续) 前言 在《云原生基础设施》一文中我们谈到了,云原生计算包含三个维度的内容,云原生基础设施,软件架构和交付与运维体系,本文将聚焦于软件架构层面。 “Software architecture refers to the fundamental structures of a software system and the discipline of creating such structures and systems. ” - 维基百科。 在我的理解,软件架构主要目标是解决下列挑战: 控制复杂性。 由于业务的复杂性,需要我们用更好的手段帮助研发组织克服认知障碍,更好的分工协作。分而治之,关注点分离等手段皆是如此。 应对不确定性。 业务在快速发展,需求在不断变化。即使再完美的软件架构,然而随着时间的推移,团队的变化,软件架构的调整不可避免。读《设计模式》,《微服务设计》等书字里行间写的都是“解耦”两字,让我们关注架构中确定性和不确定性的分离,提升架构的稳定性和应变能力。 管理系统性风险。 管理系统中的确定性以及不确定性风险,规避已知陷阱,对未知的风险做好准备。

分布式事务(二):TCC模型

我的未来我决定 提交于 2021-01-30 00:55:43
TCC介绍 TCC概念由Pat Helland于2007年发表的一篇名为《Life beyond Distributed Transactions:an Apostate’s Opinion》的论文提出,在该论文中,TCC还是以Tentative-Confirmation-Cancellation命名。 正式以Try-Confirm-Cancel作为名称的是Atomikos公司。 认识TCC TCC区别于 XA事务 ,是一种用于分布式系统中跨服务的事务管理模型;此模型通过管理服务,而不是资源管理器实现。 TCC是一种补偿型事务,也是一种柔性事务(存在中间态),该模型要求应用服务提供 try、confirm、cancel 三个接口,分别对应资源预留、操作确认、操作取消业务逻辑。 在TCC模型中,如果事务可以提交,则完成对预留资源的确认(调用confirm),如果事务要回滚,则释放预留的资源(调用cancel)。 TCC中try、confirm、cancel接口需要考虑幂等。 TCC区别于XA模型以及JAVA中的JTA接口,主要依赖业务代码实现;不用考虑框架、资源管理器、通信协议的支持和规范。 TCC与XA对比 TCC中对资源的锁是基于业务代码实现(这里的锁意思就是try接口中的预留动作),而XA基于数据库的序列化隔离级别实现。 TCC可以解决XA中单点以及并发的问题

nginx负载均衡

笑着哭i 提交于 2021-01-29 23:57:35
nginx负载均衡 负载均衡建立在现有网络结构之上,提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽,增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。 随着网站的发展,服务器压力越来越大,我们可能首先会将数据库,静态文件分离出去。但是随着发展,单独业务API的请求的压力也会变得很大,这时候我们可能需要做负载均衡将一台服务器面临的压力分散到多台服务器上。 nginx 不仅可以作为强大的web服务器,也可以作为反向代理服务器,而且nginx还可以按照调度规则实现动静分离,还可以对后端的服务器做负载均衡。 nginx负载均衡配置 nginx的负载均衡主要是对proxy_pass和upstream的配置。 我们首先需要建立一个Spring Boot的项目对外提供服务,来模拟我们实际的服务,还可以配置其它可以提供网络请求处理的框架来提供服务,这里具体由什么来提供服务和nginx配置并不相关。 Spring Boot 项目建立的过程就不提了,这里只贴一下主要的代码: import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure

急~为啥我指定的的maven依赖版本没有生效?不是最短路径原则吗?

我们两清 提交于 2021-01-29 12:42:21
女朋友他们项目用了 spring-boot ,以 spring-boot-parent 作为 parent: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.9</version> </parent> 女朋友最近想用 elasticsearch 作为搜索引擎,在项目中添加了依赖 <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>7.10.2</version> </dependency> 写好代码,一跑,报类不存在异常: java.lang.NoClassDefFoundError: org/elasticsearch/common/xcontent/DeprecationHandler at com.lv.springboot.datasource.ClientUTis.main(ClientUTis.java:13) Caused by: java.lang.ClassNotFoundException: org.elasticsearch

一文教你实现 SpringBoot 中的自定义 Validator 和错误信息国际化配置

有些话、适合烂在心里 提交于 2021-01-29 11:18:19
点击上方 蓝色字体 ,关注我 —— 一个在阿里云打工的 清华 学渣 ! 本文通过示例说明,在 Springboot 中如何自定义 Validator,以及如何实现国际化的错误信息返回。注意,本文代码千万别直接照抄,有可能会出大事情的。先留个悬念,读者朋友们能从中看出有什 么问题吗? 项目初始化入 直接从 springboot 官网中下载模板,直接通过示例中的 GreetingController 添加实现逻辑。 @RestController public class GreetingController { private static final String template = "Hello, %s!" ; private final AtomicLong counter = new AtomicLong(); @RequestMapping ( "/greeting" ) public Response<Greeting> greeting (@RequestParam(value = "name" , defaultValue = "World" ) String name) { if (! "tangleithu" .equals(name)) { throw new BadRequestException( "user.notFound" ); } return

一文教你实现 SpringBoot 中的自定义 Validator 和错误信息国际化配置

若如初见. 提交于 2021-01-29 04:31:28
一文教你实现 SpringBoot 中的自定义 Validator 和错误信息国际化配置 码农唐磊 程序猿石头 本文通过示例说明,在 Springboot 中如何自定义 Validator,以及如何实现国际化的错误信息返回。注意,本文代码千万别直接照抄,有可能会出大事情的。先留个悬念,读者朋友们能从中看出有什么问题吗? 项目初始化入 直接从 springboot 官网中下载模板,直接通过示例中的 GreetingController 添加实现逻辑。 @RestController public class GreetingController { private static final String template = "Hello, %s!"; private final AtomicLong counter = new AtomicLong(); @RequestMapping("/greeting") public Response<Greeting> greeting(@RequestParam(value = "name", defaultValue = "World") String name) { if (!"tangleithu".equals(name)) { throw new BadRequestException("user.notFound"); }

四大顶级编程学习网站

霸气de小男生 提交于 2021-01-28 12:55:48
1、B站,很多高质量的" 开源 "教程应有尽有,如果大家想学专业性较强的知识,如java的juc,ssm,springboot,springcloud,git,maven…推荐来学(学这些前先去mooc打一下基础),总之就是 想学习培训机构的课程就来b站 ,提到培训机构尤其推荐 尚硅谷 2、中国大学MOOC,上述专业性很强的课程在mooc中基本没有,但是 mooc基础学科的建设是无敌的存在 ,高数,线代,汇编,数据结构,计算机组成原理,计算机网络,操作系统,java/c/c++基础…都是无敌的存在,不学好这些先不要把精力放到java的各种新技术,新框架,小项目等花里胡哨的东西上,否则你只能当一个低端的码农; 3 、网易云课堂/腾讯课堂,和B站一样,适合学专业性(实践性)强的知识,但 只适合于"氪金玩家" ,那些价值几百几千元的课程肯定是比免费的课程要好,但如果你是"非人民币玩家",别在里面混了,尽快来b站一起玩耍; 4、csdn:不要出bug时再去查博客,平时多看一下大牛的文章,绝对是很有营养的! 来源: oschina 链接: https://my.oschina.net/u/4389114/blog/4929330