Browse Source

修改ip验证部分,理论上可以,没有测试。

master不懂
momo 2 years ago
parent
commit
b6e9341c77
  1. 2
      vote/src/main/java/com/votesystem/ssl/dao/ActivityDAO.java
  2. 159
      vote/src/main/java/com/votesystem/ssl/service/impl/VoteRecordServiceImpl.java

2
vote/src/main/java/com/votesystem/ssl/dao/ActivityDAO.java

@ -58,7 +58,7 @@ public interface ActivityDAO extends JpaRepository<Activity,String>, JpaSpecific
@Query(value = " select * from tb_activity a where a.state = '2'",nativeQuery = true)
List<Activity> findByState(Pageable pageable);
//这个不对
// @Query(value = "SELECT * FROM tb_activity WHERE state = 1 ",nativeQuery = true)
@Query(value = "SELECT * FROM tb_activity WHERE state != '-1' ",nativeQuery = true)
Page<Activity> findAllByAuthor(String author ,Pageable pageable);

159
vote/src/main/java/com/votesystem/ssl/service/impl/VoteRecordServiceImpl.java

@ -54,37 +54,40 @@ public class VoteRecordServiceImpl implements IVoteRecordService {
@Autowired
UserDAO userDAO;
private boolean isInIpRestrictAddress(VoteRecord voteRecord,String ipAddress,long time){
Map<String,Object> aidMap = (Map<String, Object>) redisUtils.get(ipAddress);
// private boolean isInIpRestrictAddress(VoteRecord voteRecord,String ipAddress,long time){
// Map<String,Object> aidMap = (Map<String, Object>) redisUtils.get(ipAddress);
// // Map<String,Object> ipMap = (Map<String, Object>) redisUtils.get(ipAddress);
// if (aidMap == null){
// aidMap = new HashMap<>();
// }
// // User user = userDAO.findOneById(voteRecord.getUid()); //获取用户
// if (aidMap.containsKey(voteRecord.getAid())){
// return true;
// } else {
// aidMap.put(voteRecord.getAid(),ipAddress);
// redisUtils.set(ipAddress,aidMap,time);
// }
// return false;
// }
private int isInIpRestrictAddress(String aid, String ipAddress){
Map<String,int> aidMap = (Map<String, int>) redisUtils.get(ipAddress);
// Map<String,Object> ipMap = (Map<String, Object>) redisUtils.get(ipAddress);
if (aidMap == null){
aidMap = new HashMap<>();
}
// User user = userDAO.findOneById(voteRecord.getUid()); //获取用户
if (aidMap.containsKey(voteRecord.getAid())){
return true;
return 0;
}else if(aidMap.containsKey(aid)){
return aidMap.get(aid); // 返回此活动这个ip下最多可以投的总票数
} else {
aidMap.put(voteRecord.getAid(),ipAddress);
redisUtils.set(ipAddress,aidMap,time);
return 0;
}
return false;
}
private boolean isInIpRestrictAddress(String aid,String ipAddress,long time){
Map<String,Object> aidMap = (Map<String, Object>) redisUtils.get(ipAddress);
// Map<String,Object> ipMap = (Map<String, Object>) redisUtils.get(ipAddress);
if (aidMap == null){
aidMap = new HashMap<>();
}
// User user = userDAO.findOneById(voteRecord.getUid()); //获取用户
if (aidMap.containsKey(aid)){
return true;
} else {
aidMap.put(aid,ipAddress);
redisUtils.set(ipAddress,aidMap,time);
}
return false;
private void setCurrentIpuserTotalVotes(String aid, String ipAddress, int userTotalVotes,long time){
Map<String,int> aidMap = new HashMap<>();
aidMap.put(aid,userTotalVotes);
redisUtils.set(ipAddress,aidMap,time);
}
/**
@ -121,18 +124,31 @@ public class VoteRecordServiceImpl implements IVoteRecordService {
}
}
// ip验证
if(activity.isIpRestrict()||true){
if(isInIpRestrictAddress(
voteRecord.getAid(),
request.getRemoteAddr(),
24*60*60)) {
return ResultFactory.buildFailResult("该IP已投过票");
}
}
// if(activity.isIpRestrict()||true){
// if(isInIpRestrictAddress(
// voteRecord.getAid(),
// request.getRemoteAddr(),
// 24*60*60)) {
// return ResultFactory.buildFailResult("该IP已投过票");
// }
// }
//4.如果是非周期性投票
if(typeMap.get("cycleType").equals("false")){
int userTotalVotes = voteRecordDAO.countByAidAndUid(activity.getId(),voteRecord.getUid());
int userOneVotes = voteRecordDAO.countByAidAndCidAndUid(activity.getId(),candidate.getId(),voteRecord.getUid());
// int result = 0;
// ip验证
if(activity.isIpRestrict()){
int result = isInIpRestrictAddress(
voteRecord.getAid(),
request.getRemoteAddr());
if(0 != result){
userTotalVotes = result;
if(userTotalVotes >= totalVotes){
return ResultFactory.buildFailResult("你已投过票或该IP投票次数已达上限")
}
}
}
//1.判断总投票数是否超过限制
if(userTotalVotes >= totalVotes){
return ResultFactory.buildFailResult("你已经投过票了");
@ -148,10 +164,33 @@ public class VoteRecordServiceImpl implements IVoteRecordService {
int voteCount = candidate.getVoteCount()+1;
candidate.setVoteCount(voteCount);
candidateService.updateCandidate(candidate.getId(),candidate);
if(activity.isIpRestrict()){
// 保存改ip段下的总投票数
setCurrentIpuserTotalVotes(voteRecord.getAid(),
request.getRemoteAddr(),
userTotalVotes + 1,
24*60*60);
}
return ResultFactory.buildSuccessResult("投票成功");
}else{ //4.如果是周期性投票
List<VoteRecord> userTotalVotes = voteRecordDAO.listToday(voteRecord.getAid(),voteRecord.getUid());
List<VoteRecord> userOneVotes = voteRecordDAO.listTodayCid(String.valueOf(voteRecord.getAid()),voteRecord.getCid(),voteRecord.getUid());
// ip验证
if(activity.isIpRestrict()){
int result = isInIpRestrictAddress(
voteRecord.getAid(),
request.getRemoteAddr());
if(0 != result){
// userTotalVotes = result;
if(result >= totalVotes){
return ResultFactory.buildFailResult("你已投过票或该IP投票次数已达上限")
}
}
}
//1.判断今天总投票数是否超过限制
if(userTotalVotes.size() >= totalVotes){
return ResultFactory.buildFailResult("今天投票已经超过限制了,明天再来吧");
@ -160,6 +199,8 @@ public class VoteRecordServiceImpl implements IVoteRecordService {
if(userOneVotes.size() >= oneVotes){
return ResultFactory.buildFailResult("今天为同一人投票超过限制了,支持一下别的选手吧");
}
//3.满足条件,增加记录,更新候选人票数
voteRecord.setId(idWorker.nextId()+"");
voteRecord.setVoteTime(new Date());
@ -167,6 +208,15 @@ public class VoteRecordServiceImpl implements IVoteRecordService {
int voteCount = candidate.getVoteCount()+1;
candidate.setVoteCount(voteCount);
candidateService.updateCandidate(candidate.getId(),candidate);
if(activity.isIpRestrict()){
// 保存改ip段下的总投票数
setCurrentIpuserTotalVotes(voteRecord.getAid(),
request.getRemoteAddr(),
userTotalVotes.size()+1,
24*60*60);
}
return ResultFactory.buildSuccessResult("投票成功");
}
}
@ -216,6 +266,18 @@ public class VoteRecordServiceImpl implements IVoteRecordService {
//1.非周期性投票
if(typeMap.get("cycleType").equals("false")){
int userTotalVotes = voteRecordDAO.countByAidAndUid(activity.getId(),uid);
// ip验证
if(activity.isIpRestrict()){
int result = isInIpRestrictAddress(
voteRecord.getAid(),
request.getRemoteAddr());
if(0 != result){
userTotalVotes = result;
if(userTotalVotes >= 0){
return ResultFactory.buildFailResult("你已投过票或该IP投票次数已达上限")
}
}
}
if(userTotalVotes > 0){
return ResultFactory.buildFailResult("你已经投过票");
}else {
@ -233,12 +295,35 @@ public class VoteRecordServiceImpl implements IVoteRecordService {
int voteCount = candidate.getVoteCount()+1;
candidate.setVoteCount(voteCount);
candidateService.updateCandidate(candidate.getId(),candidate);
if(activity.isIpRestrict()){
// 保存改ip段下的总投票数
setCurrentIpuserTotalVotes(aid,
request.getRemoteAddr(),
1,
24*60*60);
}
}
return ResultFactory.buildSuccessResult("投票成功");
}
}else {
//周期性投票
List<VoteRecord> vs = voteRecordDAO.listToday(aid,uid);
// ip验证
if(activity.isIpRestrict()){
int result = isInIpRestrictAddress(
voteRecord.getAid(),
request.getRemoteAddr());
if(0 != result){
// userTotalVotes = result;
if(result >= totalVotes){
return ResultFactory.buildFailResult("你已投过票或该IP投票次数已达上限")
}
}
}
if(vs.size() > 0){
return ResultFactory.buildFailResult("今天已经投过票了,明天再来吧!");
}else {
@ -256,6 +341,16 @@ public class VoteRecordServiceImpl implements IVoteRecordService {
int voteCount = candidate.getVoteCount()+1;
candidate.setVoteCount(voteCount);
candidateService.updateCandidate(candidate.getId(),candidate);
if(activity.isIpRestrict()){
// 保存改ip段下的总投票数
setCurrentIpuserTotalVotes(aid,
request.getRemoteAddr(),
vs.size()+1,
24*60*60);
}
}
return ResultFactory.buildSuccessResult("投票成功");
}

Loading…
Cancel
Save