ソースを参照

fix: 修改修改密码后加密密码异常bug

ChenSiTong 6 年 前
コミット
ca752e85cf

+ 0 - 2
src/main/java/nju/seec/helper/dao/AdminDAO.java

@@ -2,7 +2,6 @@ package nju.seec.helper.dao;
 
 import nju.seec.helper.entity.Admin;
 import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
 import java.util.Optional;
@@ -19,6 +18,5 @@ public interface AdminDAO extends JpaRepository<Admin, Long> {
      * @param password
      * @return
      */
-    @Query(nativeQuery = true, value = "select * from admin where username = ?1 and password = md5(sha2(?2, 256))")
     Optional<Admin> findByUsernameAndPassword(String username, String password);
 }

+ 0 - 2
src/main/java/nju/seec/helper/dao/UserDAO.java

@@ -7,7 +7,6 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
 import java.util.Optional;
@@ -53,7 +52,6 @@ public interface UserDAO extends JpaRepository<User, Long>, JpaSpecificationExec
      * @param password
      * @return
      */
-    @Query(nativeQuery = true, value = "select * from User u where u.email = ?1 and u.password = md5(sha2(?2, 256))")
     Optional<User> findByEmailAndPassword(String email, String password);
 
     /**

+ 4 - 4
src/main/java/nju/seec/helper/entity/User.java

@@ -4,10 +4,11 @@ import lombok.Data;
 import lombok.experimental.Accessors;
 import nju.seec.helper.enums.UserState;
 import nju.seec.helper.enums.UserType;
-import org.hibernate.annotations.*;
+import org.hibernate.annotations.ColumnDefault;
+import org.hibernate.annotations.CreationTimestamp;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
 
-import javax.persistence.Entity;
-import javax.persistence.Table;
 import javax.persistence.*;
 import java.time.LocalDateTime;
 
@@ -39,7 +40,6 @@ public class User {
     @Column(nullable = false)
     private String phone;
 
-    @ColumnTransformer(write = "md5(sha2(?, 256))")
     @Column(nullable = false)
     private String password;
 

+ 2 - 1
src/main/java/nju/seec/helper/service/impl/AdminServiceImpl.java

@@ -9,6 +9,7 @@ import nju.seec.helper.enums.UserState;
 import nju.seec.helper.enums.UserType;
 import nju.seec.helper.exception.HelperException;
 import nju.seec.helper.service.AdminService;
+import nju.seec.helper.util.EncryptUtils;
 import nju.seec.helper.util.StringUtils;
 import nju.seec.helper.vo.AdminVO;
 import nju.seec.helper.vo.UserVO;
@@ -34,7 +35,7 @@ public class AdminServiceImpl implements AdminService {
     @Transactional(readOnly = true)
     @Override
     public AdminVO getAdminByUsernameAndPassword(String username, String password) {
-        return adminDAO.findByUsernameAndPassword(username, password)
+        return adminDAO.findByUsernameAndPassword(username, EncryptUtils.encode(password))
                 .map(AdminVO::new)
                 .orElseThrow(() -> HelperException.of(ExceptionType.NOT_FOUND, "用户名密码错误"));
     }

+ 4 - 3
src/main/java/nju/seec/helper/service/impl/UserServiceImpl.java

@@ -11,6 +11,7 @@ import nju.seec.helper.enums.UserType;
 import nju.seec.helper.exception.HelperException;
 import nju.seec.helper.service.UserService;
 import nju.seec.helper.util.Consts;
+import nju.seec.helper.util.EncryptUtils;
 import nju.seec.helper.util.RedisCacheUtils;
 import nju.seec.helper.vo.UserVO;
 import org.springframework.stereotype.Service;
@@ -49,7 +50,7 @@ public class UserServiceImpl implements UserService {
                 .setName(userDTO.getName())
                 .setEmail(userDTO.getEmail())
                 .setPhone(userDTO.getPhone())
-                .setPassword(userDTO.getPassword())
+                .setPassword(EncryptUtils.encode(userDTO.getPassword()))
                 .setType(userDTO.getType())
                 .setState(userDTO.getType() == UserType.TEACHER ? UserState.CHECKING : UserState.NORMAL));
 
@@ -77,7 +78,7 @@ public class UserServiceImpl implements UserService {
             throw HelperException.of(ExceptionType.NOT_FOUND, "邮箱或验证码错误");
         }
 
-        user.setPassword(resetPasswordDTO.getPassword());
+        user.setPassword(EncryptUtils.encode(resetPasswordDTO.getPassword()));
         userDAO.save(user);
         cacheUtils.remove(Consts.EMAIL_CACHE_NAME, resetPasswordDTO.getUsername());
     }
@@ -86,7 +87,7 @@ public class UserServiceImpl implements UserService {
     @Override
     public UserVO getUserByEmailAndPassword(String email, String password) {
         return userDAO
-                .findByEmailAndPassword(email, password)
+                .findByEmailAndPassword(email, EncryptUtils.encode(password))
                 .map(UserVO::new)
                 .orElseThrow(() -> HelperException.of(ExceptionType.NOT_FOUND, "邮箱或密码错误"));
     }

+ 3 - 6
src/main/java/nju/seec/helper/util/EncryptUtils.java

@@ -2,6 +2,7 @@ package nju.seec.helper.util;
 
 import lombok.SneakyThrows;
 import lombok.experimental.UtilityClass;
+import org.apache.commons.codec.binary.Hex;
 import org.springframework.util.DigestUtils;
 
 import java.security.MessageDigest;
@@ -19,11 +20,7 @@ public class EncryptUtils {
     @SneakyThrows
     public String encode(String string) {
         MessageDigest messageDigest = MessageDigest.getInstance(ALGORITHM);
-        messageDigest.update(string.getBytes());
-        StringBuilder builder = new StringBuilder();
-        for (byte b : messageDigest.digest()) {
-            builder.append(String.format("%02x", b));
-        }
-        return DigestUtils.md5DigestAsHex(builder.toString().getBytes());
+        byte[] hash = messageDigest.digest(string.getBytes());
+        return DigestUtils.md5DigestAsHex(Hex.encodeHexString(hash).getBytes());
     }
 }

+ 1 - 1
src/main/java/nju/seec/helper/vo/question/BaseQuestionVO.java

@@ -34,7 +34,7 @@ public abstract class BaseQuestionVO {
         }
     }
 
-    public BaseQuestionVO(BokQuestion bokQuestion) {
+    protected BaseQuestionVO(BokQuestion bokQuestion) {
         this.id = bokQuestion.getId();
         this.stem = bokQuestion.getStem();
         this.keyPoints = bokQuestion.getKeyPoints();