目录
后端如何获得登录人的信息
前提:导入 jakarta.servlet-api
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<optional>true</optional>
</dependency>
将 RequestContextHolder.getRequestAttributes()).getRequest() 强转成 ServletRequestAttributes 类型
import com.user.common.jwt.JwtUtil;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.http.HttpHeaders;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import java.util.Map;
public class LoginContext {
/**
* 怎么获取登录用户id
* 1、获取HttpServletRequest
* 2、从HttpServletRequest中获取请求头Authorization
* 3、通过JwtUtil解析请求头(请看上一篇文章)
* 4、获取jwt中的用户id
*/
public static String getUserId() {
HttpServletRequest request = getRequest();
String token = request.getHeader(HttpHeaders.AUTHORIZATION);
Map<String, Object> claimsMap = JwtUtil.parse(token);
return claimsMap.get("id").toString();
}
public static HttpServletRequest getRequest() {
return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
}
}
全局异常处理器
一定不能忘记加注解 @RestControllerAdvice 和 @ExceptionHandler
import com.user.common.core.exception.CustomException;
import com.user.common.core.vo.ResultVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.support.DefaultMessageSourceResolvable;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.stream.Collectors;
/**
* 全局异常处理器
*/
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
/**
* 处理校验异常
*/
@ExceptionHandler
public ResultVO<Object> handle(MethodArgumentNotValidException e) {
log.error(e.getMessage(), e);
String message = e.getAllErrors().stream().map(ObjectError::getDefaultMessage).collect(Collectors.joining(";"));
return ResultVO.failed(message);
}
/**
* 处理其他异常,返回系统异常(通过后台查看错误)
*/
@ExceptionHandler
public ResultVO<Object> handle(Exception e) {
log.error(e.getMessage(), e);
return ResultVO.failed();
}
/**
* 处理自定义异常 CustomException
*/
@ExceptionHandler
public ResultVO<Object> handle(CustomException e) {
log.error(e.getMessage(), e);
return ResultVO.failed(e.getMessage());
}
}
标签:web,登录,ResultVO,springframework,处理器,org,import,全局,public
From: https://blog.csdn.net/yyhyc0/article/details/143274984