Browse Source

修改数据库字段,添加ip验证

master不懂
ssl 2 years ago
parent
commit
4bab424d55
  1. 1
      vote/src/main/java/com/votesystem/ssl/controller/user/ActivityController.java
  2. 11
      vote/src/main/java/com/votesystem/ssl/controller/user/VoteRecordController.java
  3. 3
      vote/src/main/java/com/votesystem/ssl/dao/ActivityDAO.java
  4. 4
      vote/src/main/java/com/votesystem/ssl/dao/UserDAO.java
  5. 2
      vote/src/main/java/com/votesystem/ssl/pojo/Activity.java
  6. 6
      vote/src/main/java/com/votesystem/ssl/service/IVoteRecordService.java
  7. 3
      vote/src/main/java/com/votesystem/ssl/service/impl/UserServiceImpl.java
  8. 65
      vote/src/main/java/com/votesystem/ssl/service/impl/VoteRecordServiceImpl.java

1
vote/src/main/java/com/votesystem/ssl/controller/user/ActivityController.java

@ -70,6 +70,7 @@ public class ActivityController {
@PutMapping("/admin/activity/{activityId}")
public Result updateActivity(@PathVariable("activityId") String activityId,
@RequestBody Activity activity){
log.info("===============>",String.valueOf(activity.isIpRestrict()));
return activityService.updateActivity(activityId,activity);
}
}

11
vote/src/main/java/com/votesystem/ssl/controller/user/VoteRecordController.java

@ -12,6 +12,7 @@ import org.springframework.web.bind.annotation.*;
import com.votesystem.ssl.result.Result;
import com.votesystem.ssl.service.IVoteRecordService;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
@ -32,16 +33,18 @@ public class VoteRecordController {
@PostMapping(value = {"/vote/single/{captcha}/{captcha_key}","/vote/single/{captcha_key}"})
public Result singleVote(@PathVariable(value = "captcha",required = false) String captcha,
@PathVariable(value = "captcha_key",required = false) String captchaKey,
@RequestBody VoteRecord voteRecord){
return voteRecordService.singleVote(captcha,captchaKey,voteRecord);
@RequestBody VoteRecord voteRecord,
HttpServletRequest request){
return voteRecordService.singleVote(captcha,captchaKey,voteRecord,request);
}
@PostMapping(value = {"/vote/multiple/{captcha}/{captcha_key}","/vote/multiple/{captcha_key}"})
public Result multipleVote(@PathVariable(value = "captcha",required = false) String captcha,
@PathVariable(value = "captcha_key",required = false) String captchaKey,
@RequestBody JSONObject voteData){
@RequestBody JSONObject voteData,
HttpServletRequest request){
log.info("voteData === > ",voteData);
return voteRecordService.multipleVote(captcha,captchaKey,voteData);
return voteRecordService.multipleVote(captcha,captchaKey,voteData,request);
}
//导出为Excel

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

@ -70,8 +70,7 @@ public interface ActivityDAO extends JpaRepository<Activity,String>, JpaSpecific
// @Update("UPDATE `tb_acticity` SET `state` = '0' WHERE `id` = #{activityId,jdbcType=VARCHAR}")
// int deleteActivityByState(String activityId);
// @Select("SELECT * FROM tb_activity WHERE id = #{activityId}")
// Activity findOneById(String activityId);
// // 你这几句都没写对应的SQL语句。
// Activity findOneById(String activityId);。
// @Select("SELECT * FROM tb_activity")
// Page<Activity> findAll(Pageable pageable);
// @Select( "select * from tb_activity a where a.state = '2'")

4
vote/src/main/java/com/votesystem/ssl/dao/UserDAO.java

@ -39,5 +39,7 @@ public interface UserDAO extends JpaRepository<User,String>, JpaSpecificationExe
@Query(value = "select new User(u.id,u.userName,u.avatar,u.email,u.state,u.createTime,u.updateTime) from User as u")
Page<User> listAllUser(Pageable pageable);
@Modifying
@Query(nativeQuery = true, value = "UPDATE `tb_user` SET `login_ip` = ? WHERE `id` = ? ")
int updateLoginIPById(String loginIp,int userId);
}

2
vote/src/main/java/com/votesystem/ssl/pojo/Activity.java

@ -39,6 +39,8 @@ public class Activity {
private Date createTime;
@Column(name = "update_time")
private Date updateTime;
@Column(name = "ip_restrict")
private boolean ipRestrict;
}

6
vote/src/main/java/com/votesystem/ssl/service/IVoteRecordService.java

@ -4,8 +4,10 @@ import com.alibaba.fastjson.JSONObject;
import com.votesystem.ssl.pojo.VoteRecord;
import com.votesystem.ssl.result.Result;
import javax.servlet.http.HttpServletRequest;
public interface IVoteRecordService {
Result singleVote(String captcha, String captchaKey, VoteRecord voteRecord);
Result singleVote(String captcha, String captchaKey, VoteRecord voteRecord, HttpServletRequest request);
Result multipleVote(String captcha,String captchaKey,JSONObject voteData);
Result multipleVote(String captcha,String captchaKey,JSONObject voteData, HttpServletRequest request);
}

3
vote/src/main/java/com/votesystem/ssl/service/impl/UserServiceImpl.java

@ -390,6 +390,9 @@ public class UserServiceImpl extends BaseService implements IUserService {
usernamePasswordToken.setRememberMe(true);
try {
subject.login(usernamePasswordToken);
userDAO.updateLoginIPById(
request.getRemoteAddr(),
userDAO.findOneByUserName(userName).getId()); // 更新登录IP地址
log.info("doLogin == success == userName == > " + userName);
return ResultFactory.buildSuccessResult(userName);
} catch (Exception e) {

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

@ -4,9 +4,11 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.votesystem.ssl.dao.ActivityDAO;
import com.votesystem.ssl.dao.CandidateDAO;
import com.votesystem.ssl.dao.UserDAO;
import com.votesystem.ssl.dao.VoteRecordDAO;
import com.votesystem.ssl.pojo.Activity;
import com.votesystem.ssl.pojo.Candidate;
import com.votesystem.ssl.pojo.User;
import com.votesystem.ssl.pojo.VoteRecord;
import com.votesystem.ssl.utils.Constants;
import com.votesystem.ssl.utils.RedisUtils;
@ -20,10 +22,9 @@ import com.votesystem.ssl.service.IVoteRecordService;
import com.votesystem.ssl.utils.IdWorker;
import com.votesystem.ssl.utils.TextUtils;
import javax.servlet.http.HttpServletRequest;
import javax.transaction.Transactional;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
@Slf4j
@Service
@ -50,13 +51,49 @@ public class VoteRecordServiceImpl implements IVoteRecordService {
@Autowired
RedisUtils redisUtils;
@Autowired
UserDAO userDAO;
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 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;
}
/**
* 单选
* @param voteRecord
* @return
*/
@Override
public Result singleVote(String captcha, String captchaKey, VoteRecord voteRecord) {
public Result singleVote(String captcha, String captchaKey, VoteRecord voteRecord, HttpServletRequest request) {
//1.根据aid 获取活动 ===》 根据活动获取类型
Activity activity = activityDAO.findOneById(voteRecord.getAid());//获取活动
@ -83,6 +120,15 @@ public class VoteRecordServiceImpl implements IVoteRecordService {
redisUtils.del(Constants.User.KEY_CAPTCHA_CONTENT + captchaKey);
}
}
// 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());
@ -126,7 +172,7 @@ public class VoteRecordServiceImpl implements IVoteRecordService {
}
@Override
public Result multipleVote(String captcha,String captchaKey,JSONObject voteData) {
public Result multipleVote(String captcha,String captchaKey,JSONObject voteData ,HttpServletRequest request) {
log.info("voteData ==== > ",voteData);
JSONObject jsonObject = voteData.getJSONObject("voteData");
//根据活动id 获取活动
@ -157,6 +203,15 @@ public class VoteRecordServiceImpl implements IVoteRecordService {
redisUtils.del(Constants.User.KEY_CAPTCHA_CONTENT + captchaKey);
}
}
// ip验证
// if(activity.isIpRestrict()){
// if(isInIpRestrictAddress(
// aid,
// request.getRemoteAddr(),
// 24*60*60)) {
// return ResultFactory.buildFailResult("该IP已投过票");
// }
// }
//判断是否是周期性投票
//1.非周期性投票
if(typeMap.get("cycleType").equals("false")){

Loading…
Cancel
Save