feat:
This commit is contained in:
parent
9f16537549
commit
11bec69f6b
|
@ -73,44 +73,48 @@ public class OperationLogAspect {
|
|||
* 保存日志
|
||||
*/
|
||||
private void saveLog(ProceedingJoinPoint joinPoint, OperationLog operationLog, long beginTime, SysLog sysLog) {
|
||||
// 获取当前请求
|
||||
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
||||
if (attributes != null) {
|
||||
HttpServletRequest request = attributes.getRequest();
|
||||
sysLog.setIp(getIpAddress(request));
|
||||
sysLog.setUserAgent(request.getHeader("User-Agent"));
|
||||
}
|
||||
|
||||
// 获取当前用户信息
|
||||
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||
if (authentication != null && authentication.getPrincipal() instanceof CustomUserDetails userDetails) {
|
||||
sysLog.setUserId(userDetails.getUserId());
|
||||
sysLog.setUsername(userDetails.getUsername());
|
||||
}
|
||||
|
||||
// 获取方法信息
|
||||
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
|
||||
Method method = signature.getMethod();
|
||||
String className = method.getDeclaringClass().getName();
|
||||
String methodName = method.getName();
|
||||
sysLog.setMethod(className + "." + methodName);
|
||||
|
||||
// 获取请求参数
|
||||
try {
|
||||
String params = objectMapper.writeValueAsString(joinPoint.getArgs());
|
||||
sysLog.setParams(params.length() > 2000 ? params.substring(0, 2000) : params);
|
||||
// 获取当前请求
|
||||
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
||||
if (attributes != null) {
|
||||
HttpServletRequest request = attributes.getRequest();
|
||||
sysLog.setIp(getIpAddress(request));
|
||||
sysLog.setUserAgent(request.getHeader("User-Agent"));
|
||||
}
|
||||
|
||||
// 获取当前用户信息
|
||||
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||
if (authentication != null && authentication.getPrincipal() instanceof CustomUserDetails userDetails) {
|
||||
sysLog.setUserId(userDetails.getUserId());
|
||||
sysLog.setUsername(userDetails.getUsername());
|
||||
}
|
||||
|
||||
// 获取方法信息
|
||||
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
|
||||
Method method = signature.getMethod();
|
||||
String className = method.getDeclaringClass().getName();
|
||||
String methodName = method.getName();
|
||||
sysLog.setMethod(className + "." + methodName);
|
||||
|
||||
// 获取请求参数
|
||||
try {
|
||||
String params = objectMapper.writeValueAsString(joinPoint.getArgs());
|
||||
sysLog.setParams(params.length() > 2000 ? params.substring(0, 2000) : params);
|
||||
} catch (Exception e) {
|
||||
log.error("序列化请求参数失败", e);
|
||||
sysLog.setParams(Arrays.toString(joinPoint.getArgs()));
|
||||
}
|
||||
|
||||
// 设置操作信息
|
||||
sysLog.setOperation(operationLog.description());
|
||||
sysLog.setCreateTime(LocalDateTime.now());
|
||||
sysLog.setTimeConsuming(System.currentTimeMillis() - beginTime);
|
||||
|
||||
// 保存日志
|
||||
sysLogMapper.insert(sysLog);
|
||||
} catch (Exception e) {
|
||||
log.error("序列化请求参数失败", e);
|
||||
sysLog.setParams(Arrays.toString(joinPoint.getArgs()));
|
||||
log.error("记录操作日志失败", e);
|
||||
}
|
||||
|
||||
// 设置操作信息
|
||||
sysLog.setOperation(operationLog.description());
|
||||
sysLog.setCreateTime(LocalDateTime.now());
|
||||
sysLog.setTimeConsuming(System.currentTimeMillis() - beginTime);
|
||||
|
||||
// 保存日志
|
||||
sysLogMapper.insert(sysLog);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -107,17 +107,21 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
|
|||
* 设置认证信息到 SecurityContext
|
||||
*/
|
||||
private void setAuthentication(HttpServletRequest request, String jwt) {
|
||||
Long userId = jwtUtil.getUserIdFromToken(jwt);
|
||||
if (SecurityContextHolder.getContext().getAuthentication() == null) {
|
||||
UserDetails userDetails = userDetailsService.loadUserById(userId);
|
||||
|
||||
UsernamePasswordAuthenticationToken authentication =
|
||||
new UsernamePasswordAuthenticationToken(
|
||||
userDetails, null, userDetails.getAuthorities());
|
||||
authentication.setDetails(
|
||||
new WebAuthenticationDetailsSource().buildDetails(request));
|
||||
try {
|
||||
Long userId = jwtUtil.getUserIdFromToken(jwt);
|
||||
if (SecurityContextHolder.getContext().getAuthentication() == null) {
|
||||
UserDetails userDetails = userDetailsService.loadUserById(userId);
|
||||
|
||||
UsernamePasswordAuthenticationToken authentication =
|
||||
new UsernamePasswordAuthenticationToken(
|
||||
userDetails, null, userDetails.getAuthorities());
|
||||
authentication.setDetails(
|
||||
new WebAuthenticationDetailsSource().buildDetails(request));
|
||||
|
||||
SecurityContextHolder.getContext().setAuthentication(authentication);
|
||||
SecurityContextHolder.getContext().setAuthentication(authentication);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("设置用户认证信息失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
package com.guwan.backend.security;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.guwan.backend.entity.User;
|
||||
import com.guwan.backend.mapper.UserMapper;
|
||||
import com.guwan.backend.dto.user.UserDTO;
|
||||
import com.guwan.backend.service.UserService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
|
@ -17,50 +16,35 @@ import java.util.List;
|
|||
@RequiredArgsConstructor
|
||||
public class UserDetailsServiceImpl implements UserDetailsService {
|
||||
|
||||
private final UserMapper userMapper;
|
||||
private final UserService userService;
|
||||
|
||||
@Override
|
||||
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
|
||||
User user = userMapper.selectOne(
|
||||
new LambdaQueryWrapper<User>()
|
||||
.eq(User::getUsername, username)
|
||||
);
|
||||
|
||||
UserDTO user = userService.findByUsername(username);
|
||||
if (user == null) {
|
||||
throw new UsernameNotFoundException("用户不存在");
|
||||
}
|
||||
|
||||
if (user.getStatus() != 1) {
|
||||
throw new UsernameNotFoundException("账号已被禁用");
|
||||
}
|
||||
|
||||
List<SimpleGrantedAuthority> authorities = new ArrayList<>();
|
||||
authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
|
||||
|
||||
return new CustomUserDetails(
|
||||
user.getId(),
|
||||
user.getUsername(),
|
||||
user.getPassword(),
|
||||
authorities,
|
||||
user.getStatus() == 1
|
||||
);
|
||||
return convertToUserDetails(user);
|
||||
}
|
||||
|
||||
public UserDetails loadUserById(Long userId) throws UsernameNotFoundException {
|
||||
User user = userMapper.selectById(userId);
|
||||
UserDTO user = userService.getUserById(userId);
|
||||
if (user == null) {
|
||||
throw new UsernameNotFoundException("用户不存在");
|
||||
}
|
||||
return convertToUserDetails(user);
|
||||
}
|
||||
|
||||
private UserDetails convertToUserDetails(UserDTO user) {
|
||||
List<SimpleGrantedAuthority> authorities = new ArrayList<>();
|
||||
authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
|
||||
|
||||
|
||||
return new CustomUserDetails(
|
||||
user.getId(),
|
||||
user.getUsername(),
|
||||
user.getPassword(),
|
||||
authorities,
|
||||
user.getStatus() == 1
|
||||
user.getId(),
|
||||
user.getUsername(),
|
||||
user.getPassword(),
|
||||
authorities,
|
||||
user.getStatus() == 1
|
||||
);
|
||||
}
|
||||
}
|
|
@ -26,4 +26,7 @@ public interface UserService {
|
|||
void resetPassword(String email);
|
||||
public String refreshToken(String token);
|
||||
|
||||
UserDTO findByUsername(String username);
|
||||
UserDTO findByEmail(String email);
|
||||
UserDTO findByPhone(String phone);
|
||||
}
|
|
@ -219,25 +219,45 @@ public class UserServiceImpl implements UserService {
|
|||
return null;
|
||||
}
|
||||
|
||||
private User findByUsername(String username) {
|
||||
return userMapper.selectOne(
|
||||
@Override
|
||||
public UserDTO findByUsername(String username) {
|
||||
User user = userMapper.selectOne(
|
||||
new LambdaQueryWrapper<User>()
|
||||
.eq(User::getUsername, username)
|
||||
);
|
||||
return convertToDTO(user);
|
||||
}
|
||||
|
||||
private User findByEmail(String email) {
|
||||
return userMapper.selectOne(
|
||||
@Override
|
||||
public UserDTO findByEmail(String email) {
|
||||
User user = userMapper.selectOne(
|
||||
new LambdaQueryWrapper<User>()
|
||||
.eq(User::getEmail, email)
|
||||
);
|
||||
return convertToDTO(user);
|
||||
}
|
||||
|
||||
private User findByPhone(String phone) {
|
||||
return userMapper.selectOne(
|
||||
@Override
|
||||
public UserDTO findByPhone(String phone) {
|
||||
User user = userMapper.selectOne(
|
||||
new LambdaQueryWrapper<User>()
|
||||
.eq(User::getPhone, phone)
|
||||
);
|
||||
return convertToDTO(user);
|
||||
}
|
||||
|
||||
private User findUserByUsername(String username) {
|
||||
UserDTO userDTO = findByUsername(username);
|
||||
return userDTO != null ? convertToEntity(userDTO) : null;
|
||||
}
|
||||
|
||||
private User convertToEntity(UserDTO dto) {
|
||||
if (dto == null) {
|
||||
return null;
|
||||
}
|
||||
User user = new User();
|
||||
BeanUtils.copyProperties(dto, user);
|
||||
return user;
|
||||
}
|
||||
|
||||
private UserDTO convertToDTO(User user) {
|
||||
|
|
Loading…
Reference in New Issue