From 5624e598ece28d910eac6369fcff23323310aa9e Mon Sep 17 00:00:00 2001 From: lanyangyang-yzx <15344130122@163.com> Date: Thu, 8 Jan 2026 08:36:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=94=A8=E6=88=B7=E9=82=AE?= =?UTF-8?q?=E7=AE=B1=E7=99=BB=E5=BD=95=E5=92=8C=E8=8E=B7=E5=BE=97ip?= =?UTF-8?q?=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 7 ++ .../common/ip2location/Ip2LocationConfig.java | 14 +++ .../java/com/bao/dating/config/WebConfig.java | 2 +- .../controller/IpLocationController.java | 37 ++++++++ .../controller/PostFavoriteController.java | 34 ++++++- .../bao/dating/controller/UserController.java | 39 ++++++++ .../bao/dating/mapper/PostFavoriteMapper.java | 5 + .../com/bao/dating/mapper/UserMapper.java | 22 +++++ .../com/bao/dating/pojo/vo/IpLocationVO.java | 30 ++++++ .../service/Ip2LocationClientService.java | 7 ++ .../dating/service/PostFavoriteService.java | 3 + .../com/bao/dating/service/UserService.java | 16 ++++ .../impl/Ip2LocationClientServiceImpl.java | 67 +++++++++++++ .../service/impl/PostFavoriteServiceImpl.java | 15 +++ .../dating/service/impl/UserServiceImpl.java | 61 ++++++++++++ .../java/com/bao/dating/util/MD5Util.java | 93 +++++++++++++++++++ src/main/resources/application.yml | 8 ++ .../bao/dating/mapper/PostFavoriteMapper.xml | 4 + .../com/bao/dating/mapper/UserMapper.xml | 14 +++ 19 files changed, 476 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/bao/dating/common/ip2location/Ip2LocationConfig.java create mode 100644 src/main/java/com/bao/dating/controller/IpLocationController.java create mode 100644 src/main/java/com/bao/dating/pojo/vo/IpLocationVO.java create mode 100644 src/main/java/com/bao/dating/service/Ip2LocationClientService.java create mode 100644 src/main/java/com/bao/dating/service/impl/Ip2LocationClientServiceImpl.java diff --git a/pom.xml b/pom.xml index 2079d64..7f4ac89 100644 --- a/pom.xml +++ b/pom.xml @@ -71,6 +71,13 @@ 3.12.0 + + + com.squareup.okhttp3 + okhttp + 4.12.0 + + org.springframework.boot diff --git a/src/main/java/com/bao/dating/common/ip2location/Ip2LocationConfig.java b/src/main/java/com/bao/dating/common/ip2location/Ip2LocationConfig.java new file mode 100644 index 0000000..89b3d15 --- /dev/null +++ b/src/main/java/com/bao/dating/common/ip2location/Ip2LocationConfig.java @@ -0,0 +1,14 @@ +package com.bao.dating.common.ip2location; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Data +@Component +@ConfigurationProperties(prefix = "ip2location.api") +public class Ip2LocationConfig { + private String key; + private String url; + private int timeout; +} diff --git a/src/main/java/com/bao/dating/config/WebConfig.java b/src/main/java/com/bao/dating/config/WebConfig.java index 98a0683..69b7303 100644 --- a/src/main/java/com/bao/dating/config/WebConfig.java +++ b/src/main/java/com/bao/dating/config/WebConfig.java @@ -29,7 +29,7 @@ public class WebConfig implements WebMvcConfigurer { .addPathPatterns("/**") // 忽略的接口 .excludePathPatterns( - "/user/login" + "/user/login","/user/register","/user/emailLogin","/ip/location" ); } } diff --git a/src/main/java/com/bao/dating/controller/IpLocationController.java b/src/main/java/com/bao/dating/controller/IpLocationController.java new file mode 100644 index 0000000..9e9ed90 --- /dev/null +++ b/src/main/java/com/bao/dating/controller/IpLocationController.java @@ -0,0 +1,37 @@ +package com.bao.dating.controller; + +import com.bao.dating.common.Result; +import com.bao.dating.common.ResultCode; +import com.bao.dating.pojo.vo.IpLocationVO; +import com.bao.dating.service.Ip2LocationClientService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/ip") +public class IpLocationController { + @Autowired + private Ip2LocationClientService ip2LocationClientService; + /** + * 前端访问接口,获取IP地址位置信息 + * @param ip 可选参数,要查询的IP地址 + * @return IP位置信息(JSON格式) + */ + @GetMapping("/location") + public Result getIpLocation(@RequestParam(required = false) String ip) { + if (ip.isEmpty()){ + return Result.error(ResultCode.PARAM_ERROR); + } + try { + // 调用工具类获取API响应 + IpLocationVO ipLocationVo = ip2LocationClientService.getIpLocation(ip); + return Result.success(ResultCode.SUCCESS,ipLocationVo); + } catch (Exception e) { + // 异常处理:返回错误信息(实际项目建议封装统一响应格式) + return Result.error(ResultCode.SYSTEM_ERROR,e.getMessage()); + } + } +} diff --git a/src/main/java/com/bao/dating/controller/PostFavoriteController.java b/src/main/java/com/bao/dating/controller/PostFavoriteController.java index fd44e56..607381e 100644 --- a/src/main/java/com/bao/dating/controller/PostFavoriteController.java +++ b/src/main/java/com/bao/dating/controller/PostFavoriteController.java @@ -2,12 +2,13 @@ package com.bao.dating.controller; import com.bao.dating.common.Result; import com.bao.dating.common.ResultCode; +import com.bao.dating.pojo.entity.Post; import com.bao.dating.pojo.entity.User; import com.bao.dating.service.PostFavoriteService; -import com.bao.dating.service.PostService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.List; import java.util.Map; @RestController @@ -15,6 +16,13 @@ import java.util.Map; public class PostFavoriteController { @Autowired private PostFavoriteService postFavoriteService; + + /** + * 收藏 + * @param postId 动态ID + * @param user 当前登录用户对象 + * @return 结果 + */ @PostMapping("/{post_id}/favorites") public Result> addPostFavorite(@PathVariable("post_id")Long postId, User user){ if (user == null){ @@ -23,6 +31,13 @@ public class PostFavoriteController { Long userId = user.getUserId(); return postFavoriteService.postFavorite(userId,postId); } + + /** + * 取消收藏 + * @param postId 动态id + * @param user 登录用户 + * @return 结果 + */ @DeleteMapping("/{post_id}/favorites") public Result deletePostFavorite(@PathVariable("post_id")Long postId, User user){ if (user == null){ @@ -31,4 +46,21 @@ public class PostFavoriteController { Long userId = user.getUserId(); return postFavoriteService.deletePostFavorite(userId, postId); } + + /** + * 展示所有收藏 + * @param user 当前登录用户 + * @return 结果 + */ + @GetMapping("/showFavorites") + public Result> showPostFavorites(@RequestBody User user){ + //校验参数 + if (user == null){ + return Result.error(ResultCode.PARAM_ERROR); + } + Long userId = user.getUserId(); + List posts = postFavoriteService.selectAllFavorites(userId); + return Result.success(ResultCode.SUCCESS,posts); + } + } diff --git a/src/main/java/com/bao/dating/controller/UserController.java b/src/main/java/com/bao/dating/controller/UserController.java index b62cdfd..ec03f26 100644 --- a/src/main/java/com/bao/dating/controller/UserController.java +++ b/src/main/java/com/bao/dating/controller/UserController.java @@ -12,6 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; + /** * 用户接口 * @@ -79,4 +80,42 @@ public class UserController { UserInfoVO userInfoVO =userService.updateUserInfo(userInfoUpdateDTO); return Result.success(ResultCode.SUCCESS, "用户信息更新成功", userInfoVO); } + + /** + * 用户注册 + * @param userName 用户名称 + * @param userPassword 用户密码 + * @return 返回 + */ + @PostMapping("/register") + public Result userRegister(@RequestParam String userName , @RequestParam String userPassword){ + //校验参数是否为空 + if (userName.isEmpty() || userPassword.isEmpty()){ + return Result.error(ResultCode.PARAM_ERROR); + } + if (!userService.registerUser(userName,userPassword)){ + return Result.error(ResultCode.FAIL); + } + return Result.success(ResultCode.SUCCESS,"用户注册成功",null); + } + + /** + * 通过邮箱登录 + * @param email 邮箱 + * @param code 验证码 + * @return 用户信息 + */ + @PostMapping("/emailLogin") + public Result emailLogin(@RequestParam String email , @RequestParam String code){ + //校验参数是否为空 + if (email.isEmpty() || code.isEmpty()){ + return Result.error(ResultCode.PARAM_ERROR); + } + UserLoginVO userLoginVO = userService.emailLogin(email, code); + if (userLoginVO == null){ + return Result.error(ResultCode.FAIL,"请先注册用户或添加邮箱"); + } + return Result.success(ResultCode.SUCCESS,"用户登录成功",userLoginVO); + } + } diff --git a/src/main/java/com/bao/dating/mapper/PostFavoriteMapper.java b/src/main/java/com/bao/dating/mapper/PostFavoriteMapper.java index a0aa443..24e5598 100644 --- a/src/main/java/com/bao/dating/mapper/PostFavoriteMapper.java +++ b/src/main/java/com/bao/dating/mapper/PostFavoriteMapper.java @@ -1,5 +1,6 @@ package com.bao.dating.mapper; +import com.bao.dating.pojo.entity.Post; import com.bao.dating.pojo.entity.PostFavorite; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -10,6 +11,10 @@ import java.util.List; public interface PostFavoriteMapper { //查询当前已收藏所有用户 List selectUserIDByPostID(@Param("postId") Long postId); + //添加收藏 int addPostFavorite(PostFavorite postFavorite); + //删除收藏 int deletePostFavorite(@Param("postId") Long postId); + //查询用户所有收藏 + List showAllFavorites(@Param("userid")Long userid); } diff --git a/src/main/java/com/bao/dating/mapper/UserMapper.java b/src/main/java/com/bao/dating/mapper/UserMapper.java index b15f293..9016502 100644 --- a/src/main/java/com/bao/dating/mapper/UserMapper.java +++ b/src/main/java/com/bao/dating/mapper/UserMapper.java @@ -3,6 +3,7 @@ package com.bao.dating.mapper; import com.bao.dating.pojo.dto.UserInfoUpdateDTO; import com.bao.dating.pojo.entity.User; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * 用户Mapper @@ -33,4 +34,25 @@ public interface UserMapper { */ void updateUserInfoByUserId(UserInfoUpdateDTO userInfoUpdateDTO); + /** + * 添加用户 + * @param user 用户对象 + * @return 受影响行数 + */ + int saveUser(User user); + + /** + * 查询最大用户id + * @return 用户id + */ + Long selectMaxId(); + + /** + * 根据邮箱查询用户 + * @param email 用户邮箱 + * @return 用户信息 + */ + User selectByUserEmailUser(@Param("userEmail") String email); + + } diff --git a/src/main/java/com/bao/dating/pojo/vo/IpLocationVO.java b/src/main/java/com/bao/dating/pojo/vo/IpLocationVO.java new file mode 100644 index 0000000..7b5f6f7 --- /dev/null +++ b/src/main/java/com/bao/dating/pojo/vo/IpLocationVO.java @@ -0,0 +1,30 @@ +package com.bao.dating.pojo.vo; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@JsonIgnoreProperties(ignoreUnknown = true) +public class IpLocationVO { + // 国家 + @JsonProperty("country_name") + private String countryName; + // 省份/地区 + @JsonProperty("region_name") + private String regionName; + // 城市 + @JsonProperty("city_name") + private String cityName; + // 纬度 + private String latitude; + // 经度 + private String longitude; + // ISP运营商 + @JsonProperty("isp") + private String isp; +} diff --git a/src/main/java/com/bao/dating/service/Ip2LocationClientService.java b/src/main/java/com/bao/dating/service/Ip2LocationClientService.java new file mode 100644 index 0000000..b57f538 --- /dev/null +++ b/src/main/java/com/bao/dating/service/Ip2LocationClientService.java @@ -0,0 +1,7 @@ +package com.bao.dating.service; + +import com.bao.dating.pojo.vo.IpLocationVO; + +public interface Ip2LocationClientService { + IpLocationVO getIpLocation(String ip)throws Exception; +} diff --git a/src/main/java/com/bao/dating/service/PostFavoriteService.java b/src/main/java/com/bao/dating/service/PostFavoriteService.java index 32ded85..be21ebc 100644 --- a/src/main/java/com/bao/dating/service/PostFavoriteService.java +++ b/src/main/java/com/bao/dating/service/PostFavoriteService.java @@ -1,10 +1,13 @@ package com.bao.dating.service; import com.bao.dating.common.Result; +import com.bao.dating.pojo.entity.Post; +import java.util.List; import java.util.Map; public interface PostFavoriteService { Result> postFavorite(Long userid,Long postId); Result deletePostFavorite(Long userid,Long postId); + List selectAllFavorites(Long userid); } diff --git a/src/main/java/com/bao/dating/service/UserService.java b/src/main/java/com/bao/dating/service/UserService.java index 5705ceb..f592fc1 100644 --- a/src/main/java/com/bao/dating/service/UserService.java +++ b/src/main/java/com/bao/dating/service/UserService.java @@ -2,6 +2,7 @@ package com.bao.dating.service; import com.bao.dating.pojo.dto.UserInfoUpdateDTO; import com.bao.dating.pojo.dto.UserLoginDTO; +import com.bao.dating.pojo.entity.User; import com.bao.dating.pojo.vo.UserInfoVO; import com.bao.dating.pojo.vo.UserLoginVO; import org.springframework.web.multipart.MultipartFile; @@ -45,4 +46,19 @@ public interface UserService { * @return 更新后的用户信息 */ UserInfoVO updateUserInfo(UserInfoUpdateDTO userInfoUpdateDTO); + + /** + * 用户注册 + * @param userName 用户民称 + * @return 用户信息 + */ + Boolean registerUser(String userName,String userPassword); + + /** + * 邮箱登录 + * @param email 邮箱 + * @param code 验证码 + * @return + */ + UserLoginVO emailLogin(String email , String code); } diff --git a/src/main/java/com/bao/dating/service/impl/Ip2LocationClientServiceImpl.java b/src/main/java/com/bao/dating/service/impl/Ip2LocationClientServiceImpl.java new file mode 100644 index 0000000..6d0c0d4 --- /dev/null +++ b/src/main/java/com/bao/dating/service/impl/Ip2LocationClientServiceImpl.java @@ -0,0 +1,67 @@ +package com.bao.dating.service.impl; + +import com.bao.dating.common.ip2location.Ip2LocationConfig; +import com.bao.dating.pojo.vo.IpLocationVO; +import com.bao.dating.service.Ip2LocationClientService; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; + +import java.net.URI; + +@Service +public class Ip2LocationClientServiceImpl implements Ip2LocationClientService { + @Autowired + private Ip2LocationConfig ip2LocationConfig; + + // Jackson的ObjectMapper,用于JSON解析 + private final ObjectMapper objectMapper = new ObjectMapper(); + + /** + * 调用API并只返回核心位置信息 + * @param ip 要查询的IP地址 + * @return 精简的位置信息实体类 + * @throws Exception 异常 + */ + @Override + public IpLocationVO getIpLocation(String ip) throws Exception { + // 1. 构建请求URL + URIBuilder uriBuilder = new URIBuilder(ip2LocationConfig.getUrl()); + uriBuilder.addParameter("key", ip2LocationConfig.getKey()); + if (ip != null && !ip.trim().isEmpty()) { + uriBuilder.addParameter("ip", ip); + } + URI uri = uriBuilder.build(); + + // 2. 配置超时时间(逻辑和之前一致) + RequestConfig requestConfig = RequestConfig.custom() + .setConnectTimeout(ip2LocationConfig.getTimeout()) + .setSocketTimeout(ip2LocationConfig.getTimeout()) + .build(); + + // 3. 发送请求并解析响应 + try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + HttpGet httpGet = new HttpGet(uri); + httpGet.setConfig(requestConfig); + + try (CloseableHttpResponse response = httpClient.execute(httpGet)) { + if (response.getStatusLine().getStatusCode() == 200) { + String jsonStr = EntityUtils.toString(response.getEntity(), "UTF-8"); + // 核心:将完整JSON解析为只包含位置信息的VO类 + return objectMapper.readValue(jsonStr, IpLocationVO.class); + } else { + throw new RuntimeException("调用API失败,状态码:" + response.getStatusLine().getStatusCode()); + } + } + } + } + +} diff --git a/src/main/java/com/bao/dating/service/impl/PostFavoriteServiceImpl.java b/src/main/java/com/bao/dating/service/impl/PostFavoriteServiceImpl.java index 9424f11..c1741fa 100644 --- a/src/main/java/com/bao/dating/service/impl/PostFavoriteServiceImpl.java +++ b/src/main/java/com/bao/dating/service/impl/PostFavoriteServiceImpl.java @@ -4,6 +4,7 @@ import com.bao.dating.common.Result; import com.bao.dating.common.ResultCode; import com.bao.dating.mapper.PostFavoriteMapper; import com.bao.dating.mapper.PostMapper; +import com.bao.dating.pojo.entity.Post; import com.bao.dating.pojo.entity.PostFavorite; import com.bao.dating.service.PostFavoriteService; import org.springframework.beans.factory.annotation.Autowired; @@ -58,4 +59,18 @@ public class PostFavoriteServiceImpl implements PostFavoriteService { postMapper.decreaseFavoriteCount(postId); return null; } + + /** + * 展示所有收藏 + * @param userid 用户id + * @return 查询到的结果 + */ + + @Override + public List selectAllFavorites(Long userid) { + if (userid == null){ + return null; + } + return postFavoriteMapper.showAllFavorites(userid); + } } diff --git a/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java b/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java index d6b48dd..0a66093 100644 --- a/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java +++ b/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java @@ -1,5 +1,7 @@ package com.bao.dating.service.impl; +import com.bao.dating.common.Result; +import com.bao.dating.common.ResultCode; import com.bao.dating.common.aliyun.AliOssUtil; import com.bao.dating.common.aliyun.GreenImageScan; import com.bao.dating.common.aliyun.GreenTextScan; @@ -13,6 +15,7 @@ import com.bao.dating.pojo.entity.User; import com.bao.dating.pojo.vo.UserInfoVO; import com.bao.dating.pojo.vo.UserLoginVO; import com.bao.dating.service.UserService; +import com.bao.dating.service.VerificationCodeService; import com.bao.dating.util.FileUtil; import com.bao.dating.util.JwtUtil; import com.bao.dating.util.MD5Util; @@ -48,6 +51,9 @@ public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; + @Autowired + private VerificationCodeService verificationCodeService; + /** * 用户登录 * @@ -275,4 +281,59 @@ public class UserServiceImpl implements UserService { BeanUtils.copyProperties(updatedUser, userInfoVO); return userInfoVO; } + + /** + * 查询用户 + * @param userName 用户民称 + * @return + */ + @Override + public Boolean registerUser(String userName,String userPassword) { + //校验参数是否为空 + if (userName.isEmpty() || userPassword.isEmpty()){ + return false; + } + //产看数据库是否存在已注册用户 + User user = userMapper.getByUsername(userName); + if (user != null){ + return false; + } + //将用户数据存入苏数据库 + String salt = "lyy123"; + String passwordHash = MD5Util.encryptWithSalt(userPassword, salt); + //查询最大用户id + Long maxId = userMapper.selectMaxId(); + User saveUser = new User(); + saveUser.setUserId(maxId+1); + saveUser.setUserName(userName); + saveUser.setPasswordHash(passwordHash); + saveUser.setSalt(salt); + saveUser.setUpdatedAt(LocalDateTime.now()); + saveUser.setCreatedAt(LocalDateTime.now()); + int count = userMapper.saveUser(saveUser); + return count > 0; + } + + /** + * 邮箱登录 + * @param email 邮箱 + * @param code 验证码 + * @return 脱敏用户信息 + */ + @Override + public UserLoginVO emailLogin(String email, String code) { + User user = userMapper.selectByUserEmailUser(email); + if (user == null) + return null; + boolean flag = verificationCodeService.verifyEmailCode(email, code); + if (!flag) + return null; + // 生成token + String token = JwtUtil.generateToken(String.valueOf(user.getUserId())); + UserLoginVO userLoginVO = new UserLoginVO(); + userLoginVO.setUserId(user.getUserId()); + userLoginVO.setNickname(user.getNickname()); + userLoginVO.setToken(token); + return userLoginVO; + } } diff --git a/src/main/java/com/bao/dating/util/MD5Util.java b/src/main/java/com/bao/dating/util/MD5Util.java index e69de29..1e8cfc7 100644 --- a/src/main/java/com/bao/dating/util/MD5Util.java +++ b/src/main/java/com/bao/dating/util/MD5Util.java @@ -0,0 +1,93 @@ +package com.bao.dating.util; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +/** + * MD5工具类 + * 提供MD5加密功能 + * @author KilLze + */ +public class MD5Util { + + /** + * 对字符串进行MD5加密 + * @param input 待加密的字符串 + * @return MD5加密后的32位小写字符串 + */ + public static String encrypt(String input) { + if (input == null || input.isEmpty()) { + return null; + } + + try { + MessageDigest md = MessageDigest.getInstance("MD5"); + byte[] digest = md.digest(input.getBytes()); + return bytesToHex(digest); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException("MD5算法不可用", e); + } + } + + /** + * 对字符串进行MD5加密(带盐值) + * @param input 待加密的字符串 + * @param salt 盐值 + * @return MD5加密后的32位小写字符串 + */ + public static String encryptWithSalt(String input, String salt) { + if (input == null || input.isEmpty()) { + return null; + } + if (salt == null) { + salt = ""; + } + return encrypt(input + salt); + } + + /** + * 验证字符串与MD5值是否匹配 + * @param input 原始字符串 + * @param md5Hash MD5哈希值 + * @return 是否匹配 + */ + public static boolean verify(String input, String md5Hash) { + if (input == null || md5Hash == null) { + return false; + } + return encrypt(input).equalsIgnoreCase(md5Hash); + } + + /** + * 验证字符串与MD5值是否匹配(带盐值) + * @param input 原始字符串 + * @param salt 盐值 + * @param md5Hash MD5哈希值 + * @return 是否匹配 + */ + public static boolean verifyWithSalt(String input, String salt, String md5Hash) { + if (input == null || md5Hash == null) { + return false; + } + if (salt == null) { + salt = ""; + } + return encryptWithSalt(input, salt).equalsIgnoreCase(md5Hash); + } + + /** + * 将字节数组转换为十六进制字符串 + * @param bytes 字节数组 + * @return 十六进制字符串 + */ + private static String bytesToHex(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + for (byte b : bytes) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } +} + + + diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 82aafc7..6c52db7 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -65,3 +65,11 @@ aliyun: region-id: cn-hangzhou sign-name: 速通互联验证码 template-code: 100001 + +# ip2location.io 相关配置 +ip2location: + api: + key: 95F4AB991174E296AFD5AD0EF927B2ED # ip2location.io API密钥 + url: https://api.ip2location.io/ + timeout: 5000 # 请求超时时间(毫秒) + diff --git a/src/main/resources/com/bao/dating/mapper/PostFavoriteMapper.xml b/src/main/resources/com/bao/dating/mapper/PostFavoriteMapper.xml index 41b5195..aeab371 100644 --- a/src/main/resources/com/bao/dating/mapper/PostFavoriteMapper.xml +++ b/src/main/resources/com/bao/dating/mapper/PostFavoriteMapper.xml @@ -14,4 +14,8 @@ + + \ No newline at end of file diff --git a/src/main/resources/com/bao/dating/mapper/UserMapper.xml b/src/main/resources/com/bao/dating/mapper/UserMapper.xml index 61bb82b..dad0a01 100644 --- a/src/main/resources/com/bao/dating/mapper/UserMapper.xml +++ b/src/main/resources/com/bao/dating/mapper/UserMapper.xml @@ -3,6 +3,10 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + insert into user(user_id,user_name,password_hash,salt,created_at,updated_at) values (#{userId},#{userName},#{passwordHash},#{salt},#{createdAt},#{updatedAt}) + + + + + + + UPDATE user