对于前后端分离的项目,后端人员通常都要对发起请求的用户的合法性和权限进行审核(比如用户每次请求都要携带token,token校验通过的才放行),只要审核通过了,基本上都允许用户的后续操作。可是这样就安全了吗?任何一个在后端开发浸淫多年的人,都会不知不觉间往数据安全方面倾注更多的精力。笔者作为某小公司中的唯一后端开发,在数据安全这块也是操碎了心的,先是重构了登录注册接口,防止用户账号密码被暴力破解;接着又引入了token令牌机制,对所有访问网站资源的请求的进行安全过滤;紧接着又对支付系统进行了重构,对金额和密码进行了加密传输,···。咱也是不得不关心啊,身在其位就得谋其事,想象一下,未来哪天项目终于上了正轨,开始盈利,你正准备迎接成功的时候,突然用户账号被频繁盗取或者网站接口被人恶意调用导致服务器崩溃了等等,那时才蛋疼。
回到前面的话题,只是对用户的合法性校验通过就足够了吗?如果是合法用户进行恶意操作呢?说的通俗一点,一个通过正常流程注册的合法的账号,在1秒钟内10次调用了同一个接口,这种请求合理吗?如果1秒钟内调用了100次呢?如果这个接口是类似抢单或支付的接口呢?退一步说,这个社会是很和谐美好的,好人总会比坏人多,但是如果你遇到的是一个不靠谱的前端开发人员呢?他在调用后端接口的时候,不会对必传字段做空值判断,更不会在用户点击按钮之后,后端还没有返回处理结果的那不算很长但用户足以再多点几次按钮的时间内将按钮禁用掉,这样也会造成接口被重复调用。
因此,防止接口被重复调用也是后端开发人员需要认真对待的问题。
小弟不才,仅能在已有的知识范畴内勉强给出一种临时解决方案,也算对得起自己现今所处的岗位了,下面是代码:
package interceptors;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Htt