以注解的形式限制接口的访问

首先声明此方案与并发没有关系,所以下文或者截图中涉及到的并发一词都是不合理的

这种控制其实不严格,比如针对多台服务器就不是你想的那样

此方案是用来限制接口访问的数,只是处于保护服务器,减少数据库压力


背景:项目中有一个按二级大类批量更改配置的操作,但是还不能直接以update的形式进行更改,必须先假删除,再insert,并且在删除之前有一个select,对查出来的数据进行遍历。

导致的问题:事务时间长,会出现dubbo超时,导致数据库完成更新,前端显示系统异常,给用户一个操作失败的错觉

解决方案:异步操作数据库,直接给前端返回,以牺牲结果正确性保证,来换取一个友好的交互。

此方案还是有一个问题,当数据库还未更新完成时,用户查询时查不到最新修改的,导致用户以为更新失败再次更改,无形中增加了不必要的重复更新操作

解决方案:给哪些有上述问题的接口添加一个访问次数限制控制,比如此接口一分钟之内只允许更改一次,此方案并不能保证用户的每一次操作,数据库都会成功更新,只是对这种批量的操作设置得更人性化一点,只是在保护服务器


以下给出代码:

一:基础类的创建

1、创建使用在Controller类上的注解


2、创建使用在方法上的注解(前提是该方法所在的类使用了步骤一中的注解)

3、创建每个控制点的实体类(红框部分大家可以思考一下为什么要重写)

4、创建一个被禁止访问的一个友好提示,这里建了一个实体类


以上完成了一些基本的类和注解的创建,接下来就是如何去实现了

二、业务实现

1、思路分析,既然是对每个接口的访问,那我们就要考虑如何把控制权放在接口的上层(具体哪一层可以根据项目择优选择),因为controller的上层肯定知道本次请求要访问哪个handler(既,哪个接口),我在项目中把控制权放在了拦截器层面

2、以下列出我的业务实现

拦截器的实现,方法里第一步可以先判断一下map的长度是否大于零,你懂的,这里就不改了

setApplicationContext方法的实现

拦截器工具类的方法有两个

最后配置一下拦截器到配置文件里,  <mvc:interceptors></mvc:interceptors>里可以配置多个拦截器


注意事项:

1、控制点事控制接口的访问的,不是控制按钮点击的,所以要注意一些情况,比如:你对一个修改和一个查询做了并发控制,但是通常修改完后会自定调取查询接口,所以要注意隐藏的一些调用

2、注意拦截器的执行顺序

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,674评论 1 92
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,323评论 19 139
  • ༄༅།། ཀ་དག་བོནཉིད་ངང་ལས་མ་གཡོས་ཀྱང་། ཁ་དོག་ལྔ་ལྡན་ལོངས་སྐུ...
    格桑旦增阅读 1,339评论 1 0
  • 一周总结: 1. 企业生命周期:作为公司管理者应识别自己公司的管理阶段,转型期应该如何去做,成熟期我们又应要做些什...
    城市格调刘姣阅读 1,254评论 0 0
  • 一、新三板的转板(IPO)步骤简析 第一步IPO辅导 企业要IPO,首先得经历IPO辅导阶段。根据现行标准,不再强...
    授米阅读 5,464评论 0 2