spring boot集成swagger,自定义注解,拦截器,xss过滤,异步调用,guava限流,定时任务案例, 发邮件
本文介绍spring boot集成swagger,自定义注解,拦截器,xss过滤,异步调用,定时任务案例
集成swagger--对于做前后端分离的项目,后端只需要提供接口访问,swagger提供了接口调用测试和各种注释的可视化web界面。
配置swagger的扫描包路径,api信息等,见配置类SwaggerConfig。项目中遇到的下列注解都由swagger提供:
@Api、@ApiOperation、@ApiModel、@ApiModelProperty
访问http://localhost/swagger-ui.html#/就可以看到swagger文档,输入入参,点击try it out调接口,如图:

自定义注解,拦截器,过滤器--spring boot提供了跨域请求的注解@CrossOrigin(当然也可以写一个全局的过滤器),详情见类UserController.class。
项目中XssFilter类定义了跨站脚本攻击(xss攻击)过滤,用到了ESAPI安全处理的jar包。
注解@LogForTimeConsumer实现了对方法的执行时间的日志输出;
注解@LogForController实现了view层出参和入参的日志输出;
注解@AutoValidate实现了对@RequestBody修饰的实体类(见类RegisterRequest.class)中属性的合法性的校验(即属性的正则表达式校验);
注解@AccessLimit实现了接口防刷的功能;
注解@TokenValidate实现了用户是否登录的校验,必须登录的接口加此注解;
拦截器RequestTimeConsumingInterceptor实现了接口耗时统计;
拦截器RepeatSubmitInterceptor实现了重复提交的校验;
拦截器RateLimitInterceptor实现了服务器访问的限流操作。
异步调用--UserController.class中注册接口提供了异步发送邮件的功能。只需要在异步调用的方法添加注解@Async和在启动类加注解@EnableAsync,
启动项目并调接口查看执行时间可以看到异步调用已经生效。
定时任务--启动类添加注解@EnableScheduling,用@Component放到定时任务的类上,@Scheduled放到定时任务的方法上就可以实现定时任务,见类TaskTest.class。
发邮件-EmailController.class;
项目源码地址:https://github.com/zhzhair/spirng-boot-demos.git
spring boot集成swagger,自定义注解,拦截器,xss过滤,异步调用,guava限流,定时任务案例, 发邮件的更多相关文章
- Spring Boot 集成 Swagger,生成接口文档就这么简单!
之前的文章介绍了<推荐一款接口 API 设计神器!>,今天栈长给大家介绍下如何与优秀的 Spring Boot 框架进行集成,简直不能太简单. 你所需具备的基础 告诉你,Spring Bo ...
- 【Swagger】可能是目前最好的 Spring Boot 集成 swagger 的方案
[Swagger]可能是目前最好的Spring Boot集成 swagger 的方案 " style="border:dotted 1px #ddd;display:block; ...
- Servlet开发笔记(一)
一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...
- 宝塔控制面板创建ftp后链接不上的解决方法
很多的新手在安装宝塔面板并且创建完ftp管理后链接ftp居然链接不上?有许多朋友都不知道本站q302博客也是基于宝塔控制面板管理的,本站在安装网站完成后也和你们一样ftp链接不上,后面经过多次测试之后 ...
- java.util.NoSuchElementException错误原因及解决方案
1.原因:没有控制语句导致的迭代器的越界,使得map中的数据无法传入reduce,从而无法把结果传入目标文件中. 在进行Mapreduce实例——WordCount实验时遇到的错误,开始以为是lib包 ...
- React Native & iframe & WebView
React Native & iframe & WebView React Native 怎么渲染 iframe 页面 WebView & source html https: ...
- DAY19、日常模块
一.hashlib模块:加密1.基本使用:import hashlibcipher = hashlib.md5('需要加密的数据(二进制形式)'.encode('utf-8'))print(ciphe ...
- CH1201 最大子序和
http://contest-hunter.org:83/contest/0x10%E3%80%8C%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9 ...
- pointer-events: none
如果为某个元素样式设置了“pointer-events: none ”,事件.连接.悬浮样式都没有了 如果为a标签设置了“pointer-events: none ”,点击a标签,不会跳转到链接地址, ...
- Gym - 101982F Rectangles (扫描线+线段树)
链接:http://codeforces.com/gym/101982/attachments 思路: 问被覆盖次数为奇数次的矩阵的面积并 扫描线求矩阵面积并我们是上界赋为-1,下界赋为1,因为要求覆 ...