package com.smartreview.utils; import com.smartreview.exception.SmartReviewException; import com.smartreview.po.User; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; /** * 安全工具类 */ @Component @RequiredArgsConstructor public class SecurityUtil { private final TokenUtil tokenUtil; /** * 获取当前登录用户ID */ public Long getCurrentUserId() { HttpServletRequest request = getCurrentRequest(); if (request == null) { throw SmartReviewException.notLogin(); } // 优先从session获取 User user = (User) request.getSession().getAttribute("currentUser"); if (user != null) { return user.getId(); } // 从token获取 String token = request.getHeader("token"); if (token == null || token.isEmpty()) { token = request.getHeader("Authorization"); if (token != null && token.startsWith("Bearer ")) { token = token.substring(7); } } Long userId = tokenUtil.getUserId(token); if (userId == null) { throw SmartReviewException.notLogin(); } return userId; } /** * 获取当前登录用户 */ public User getCurrentUser() { HttpServletRequest request = getCurrentRequest(); if (request == null) { throw SmartReviewException.notLogin(); } User user = (User) request.getSession().getAttribute("currentUser"); if (user != null) { return user; } String token = request.getHeader("token"); if (token == null || token.isEmpty()) { token = request.getHeader("Authorization"); if (token != null && token.startsWith("Bearer ")) { token = token.substring(7); } } user = tokenUtil.getUser(token); if (user == null) { throw SmartReviewException.notLogin(); } return user; } private HttpServletRequest getCurrentRequest() { ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); return attributes != null ? attributes.getRequest() : null; } }