前言最近一直在搞 Hexo+GitHubPage 搭建个人博客,所以没怎么进行 SpringBoot 的学习。所以今天就将上次的”?秒防刷新”进行了一番修改。上次是采用注解加拦截器(@Aspect)来实现功能的。但是,如果需求是一个
前言
最近一直在搞 Hexo+GitHubPage 搭建个人博客,所以没怎么进行 SpringBoot 的学习。所以今天就将上次的”?秒防刷新”进行了一番修改。上次是采用注解加拦截器(@Aspect)来实现功能的。但是,如果需求是一个全局的拦截器对于大部分URL都进行拦截的话,自己一个个加显然是不可能的。而且上次的拦截器对于Controller的参数有所要求,在实际他人引用总是显得不方便。所以,这次使用了继承HandlerInterceptor来实现拦截器。
功能需求
对于项目中某类URL进行拦截,若用户在短时间内大量访问该链接,则将用户IP列入黑名单,禁止用户访问网页。(同时,可以使用@Async来创建定时任务帮用户解禁。)
知识记录
spring 的拦截器 HandlerInterceptor 的功能跟过滤器类似,但是提供更精细的的控制能力:在request被响应之前、request被响应之后、视图渲染之前以及request全部结束之后。我们不能通过拦截器修改request内容,但是可以通过抛出异常(或者返回false)来暂停request的执行。
配置拦截器也很简单,Spring 为此提供了基础类WEBmvcConfigurerAdapter ,我们只需要重写addInterceptors 方法添加注册拦截器。
实现自定义拦截器只需要3步:
创建我们自己的拦截器类并实现 HandlerInterceptor 接口。
创建一个 Java 类继承 WebMvcConfigurerAdapter,并重写 addInterceptors 方法。
实例化我们自定义的拦截器,然后将对像手动添加到拦截器链中(在addInterceptors方法中添加)。
正式开工
IP工具类
由于不清楚用户代理,最好能使用一个工具类来来获取用户真实IP。这个Google就能找到,我就不贴代码了。
我使用的是MySQL数据库,持久层框架为mybatis。具体可参考”准备”步骤。
我在”myboot”数据库中创建一张表”blaclist”,属性如下:
字段名 | 解释 |
---|---|
id | 记录的id |
ip | 用户真实IP |
iptime | IP被锁时间 |
实体类
public class BlackList { private int id; private String ip; private Date iptime; // 日期类型,格式:yyyy-MM-dd HH:mm:ss //构造器 public BlackList() { } public BlackList(String ip, Date iptime) { this.ip = ip; this.iptime = iptime; } // get && set 方法}
--结束END--
本文标题: spring boot拦截器实现IP黑名单实例代码
本文链接: https://lsjlt.com/news/226656.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0