Browse Source

密码修改

huangqizheng/feature-20250714180618-数据同步
sunjiabei 1 month ago
parent
commit
47d0e611c8
  1. 24
      src/main/java/com/example/demo/controller/AdminController.java
  2. 2
      src/main/java/com/example/demo/mapper/AdminMapper.java
  3. 4
      src/main/java/com/example/demo/service/AdminService.java
  4. 65
      src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java
  5. 8
      src/main/resources/mapper/AdminMapper.xml

24
src/main/java/com/example/demo/controller/AdminController.java

@ -3,6 +3,7 @@ package com.example.demo.controller;
import com.example.demo.Util.JWTUtil;
import com.example.demo.Util.TokenPayload;
import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.vo.Password;
import com.example.demo.domain.vo.Result;
import com.example.demo.service.AdminService;
import com.fasterxml.jackson.core.JsonProcessingException;
@ -29,27 +30,29 @@ import org.springframework.web.bind.annotation.*;
public class AdminController {
@Autowired
private AdminService adminService;
@PostMapping("/login")
public Result login(@RequestBody Admin admin) {
try {
admin = adminService.login(admin);
String token = JWTUtil.createJWT(admin);
System.out.println( token);
System.out.println(token);
admin.setPassword(null);
return Result.success(token,admin);
return Result.success(token, admin);
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
return Result.error(e.getMessage());
}
}
@PostMapping("/userinfo")
public UserDetails getUserInfo(@RequestHeader("token") String token1) {
//String token = token1.getToken();
String token = token1;
System.out.println("1/*/*/*/*//*-*-*-*-*-*-1" +token);
System.out.println("1/*/*/*/*//*-*-*-*-*-*-1" + token);
try {
System.out.println("/+/+/+/+/+/+/+//" + JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class));
return JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
@ -59,7 +62,7 @@ public class AdminController {
}
@PostMapping("/adminId")
public Result selectId(@RequestBody Admin admin ) {
public Result selectId(@RequestBody Admin admin) {
try {
String ID = adminService.getId(admin.getAccount());
@ -69,4 +72,17 @@ public class AdminController {
return Result.error(e.getMessage());
}
}
@PostMapping("/password")
public Result updatePassword(@RequestBody Password password){
try {
return adminService.updatePassword(password);
} catch (Exception e) {
return Result.error("输入不能为空,请检查");
}
}
}

2
src/main/java/com/example/demo/mapper/AdminMapper.java

@ -16,5 +16,7 @@ public interface AdminMapper {
Admin getAdmin(String account);
Admin selectByName(String account);
Integer getId(String account);
void updatePassword(Admin admin);
}

4
src/main/java/com/example/demo/service/AdminService.java

@ -1,6 +1,8 @@
package com.example.demo.service;
import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.vo.Password;
import com.example.demo.domain.vo.Result;
/**
* @program: GOLD
@ -14,4 +16,6 @@ public interface AdminService {
Admin login(Admin admin)throws Exception;
String getId(String account);
Result updatePassword(Password password);
}

65
src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java

@ -1,24 +1,33 @@
package com.example.demo.serviceImpl;
import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.vo.Password;
import com.example.demo.domain.vo.Result;
import com.example.demo.mapper.AdminMapper;
import com.example.demo.service.AdminService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.regex.Pattern;
@Service
@RequiredArgsConstructor
public class AdminServiceImpl implements AdminService {
@Autowired
private AuthenticationManager authenticationManager;
private AuthenticationManager authenticationManager;
private final AdminMapper adminMapper;
@Override
@ -45,12 +54,12 @@ public class AdminServiceImpl implements AdminService {
System.out.println("admin:" + account);
System.out.println("admin:" + admin.getPassword());
UsernamePasswordAuthenticationToken token =
new UsernamePasswordAuthenticationToken(account,admin.getPassword());
new UsernamePasswordAuthenticationToken(account, admin.getPassword());
Authentication authentication = authenticationManager.authenticate(token);
return (Admin) authentication.getPrincipal();
} catch (Exception e) {
System.out.println("密码错误"+e.getMessage());
System.out.println("密码错误" + e.getMessage());
throw new RuntimeException("登录失败,请稍后再试", e);
}
}
@ -72,4 +81,54 @@ public class AdminServiceImpl implements AdminService {
}
return false;
}
private static final String PASSWORD_REGEX = "^(?![0-9]+$)(?![a-zA-Z]+$)(?!\\W+$).{8,16}$";
private static final Pattern PASSWORD_PATTERN = Pattern.compile(PASSWORD_REGEX);
@Override
public Result updatePassword(Password password) {
String oldPassword = password.getOldPassword();
String newPassword = password.getNewPassword();
String againPassword = password.getAgainPassword();
// 检查两次输入的新密码是否一致
if (!newPassword.equals(againPassword)) {
return Result.error("两次输入的新密码不一致");
}
// 检查新密码是否符合复杂度要求
if (!PASSWORD_PATTERN.matcher(newPassword).matches()) {
return Result.error("新密码必须为8-16位数字、字母或符号组成,且至少包含其中两种");
}
if(adminMapper.getAdmin(password.getAccount())==null)
{
return Result.error("用户不存在");
}
try {
// 创建认证令牌并验证旧密码
UsernamePasswordAuthenticationToken token =
new UsernamePasswordAuthenticationToken(password.getAccount(), oldPassword);
Authentication authentication = authenticationManager.authenticate(token);
// 获取认证后的用户信息
Admin admin = (Admin) authentication.getPrincipal();
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
// 使用Spring管理的密码编码器不要手动new
String encodedPassword = passwordEncoder.encode(newPassword);
// 更新数据库中的密码
admin.setPassword(encodedPassword);
admin.setUpdateTime(new Date()); // 更新修改时间
adminMapper.updatePassword(admin);
return Result.success("密码修改成功");
} catch (BadCredentialsException e) {
// 旧密码验证失败
return Result.error("原密码错误");
}
catch (Exception e) {
return Result.error("密码更新失败");
}
}
}

8
src/main/resources/mapper/AdminMapper.xml

@ -14,4 +14,12 @@
select id from admin
where account=#{account}
</select>
<!--更新用户密码-->
<update id="updatePassword">
update admin
set password = #{password},
update_time = #{updateTime}
where account = #{account}
</update>
</mapper>
Loading…
Cancel
Save