基于Java8
+ Spring Boot
创建的 Http Request 拦截和校验框架😋
花费 10 分钟 来学习用它做点东西,他能帮你检查并校验你的Http请求的参数.
它能防御重放攻击, 检查 参数是否被修改(数字签名), 校验 请求是否超时
Aegis
是一个追求简洁的框架, 所以使用了最新的技术, 能够拦截每一个http请求, 然后检查其中的参数, 并且你能修改每个校验策略.
如果你觉得这个框架不错,能够给我一个赞 star来支持我:blush:
使用Maven创建一个基础的Maven
项目,然后添加依赖:
<dependency>
<groupId>com.github.com.erictao2</groupId>
<artifactId>aegis-api</artifactId>
<version>1.0.1</version>
</dependency>
你必须使用Spring Boot 来构建你的项目.
然后添加注解到你的Controller
或Method
上,请参考后续文档查看每个注解的作用!
现在Aegis
有三个注解可以使用。
这个注解能帮助你校验request里参数的数字签名,如果有人篡改过你的request参数,Aegtis
将会拦截下该请求。附上代码:
@RestController
// 你也可以把注解用到Controller的类上,这样就是针对类的所有方法起作用
//@DefendModify
public class DemoController {
@GetMapping("/1")
//@DefendModify(name ="reqSign", algorithm = "md5", key = "aegis-key")
@DefendModify
public String test1(){
return "test1-demo" ;
}
}
你的请求 URL
必须像这样:
http://localhost:8080/1?parameterOne=oneoneone&reqSign=f4da2ed1dca4bfd481d83cfb89f12ab6
或者在Request Body里包含JSON格式的这些参数
在URL里
reqSign
= (是用算法加密所有其他参数得出的结果, 默认是MD5加密 )
这个注解能够帮你检查请求是否超时:
@RestController
// You also can use annotation in Controller class
//@DefendTimeout
public class DemoController {
@GetMapping("/2")
//@DefendTimeout(name ="timestamp", timeout = 1000, timeUnit = {TimeUnit.MILLISECONDS})
@DefendTimeout
public String test2(){
return "test2-demo" ;
}
}
你的请求 URL
必须像这样:
http://localhost:8080/2?timestamp=1550653175000
或者在Request Body里包含JSON格式的这些参数
这个注解能帮你防御重放攻击:
@RestController
// You also can use annotation in Controller class
//@DefendReplay
public class DemoController {
@GetMapping("/3")
//@DefendReplay(name = "reqNo", prefix = "aegisReqNo", timeout = 1000 , timeUnit = {TimeUnit.MILLISECONDS})
@DefendReplay
public String test3(){
return "test3-demo" ;
}
}
你的请求 URL
必须像这样:
http://localhost:8080/3?reqNo=ds1×tamp=1533205566000
或者在Request Body里包含JSON格式的这些参数
当你发出一个请求时,如果该请求的reqNo
和之前某个请求的reqNo
相同,且两个请求的时间(timestamp
)之差,没有超过设定的时间(timeout
),那么这个请求将会被拦截掉。
- Mail: 823222209@qq.com
Please see Apache License