项目中客户端,服务端验证,数据库联合唯一约束,事务管理。

项目中有个需求,发布一个活动,记录下参加该活动的id和参与人id,同时调用接口,往收藏夹中添加一条记录,往交易表中添加一条记录。最后根据返回的结果,给出不同的提示信息。

1.如果当前的在jsp页面上面做处理,判断是否参与过。参加过之后,参加按钮不可点。没有参加的情况,参加按钮可以点。

2.jsp客户端加上js处理,参加按钮点击完之后,按钮不可点。

3.在controller中,业务逻辑开始前,再次java判断是否参加过该活动。

4.在数据库中参与表(活动id,参与人id)加上联合唯一约束。根据异常来处理不重复参加。

5.将以上几个表的操作放到一个事务中处理。避免参加人重复参加的情况。

总结:不要相信客户端的验证,不要相信网络的时延(多次点击多次提交的情况~~!!),正常情况下,以上1到5任何一个情况都可以限制参与人只参加一次活动,然而项目上线在实际中却还是出现了重复参加的记录。所以只有将以上情况联合起来一起处理。

原文地址:https://www.cnblogs.com/simpledev/p/3898934.html