package com.label.common.exception; import com.label.common.result.Result; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.AuthorizationException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @Slf4j @RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(BusinessException.class) public ResponseEntity> handleBusinessException(BusinessException e) { log.warn("业务异常: code={}, message={}", e.getCode(), e.getMessage()); return ResponseEntity .status(e.getHttpStatus()) .body(Result.failure(e.getCode(), e.getMessage())); } /** * 处理 Shiro 权限不足异常(@RequiresRoles / subject.checkRole() 抛出)→ 403 */ @ExceptionHandler(AuthorizationException.class) public ResponseEntity> handleAuthorizationException(AuthorizationException e) { log.warn("权限不足: {}", e.getMessage()); return ResponseEntity .status(HttpStatus.FORBIDDEN) .body(Result.failure("FORBIDDEN", "权限不足")); } @ExceptionHandler(Exception.class) public ResponseEntity> handleException(Exception e) { log.error("系统异常", e); return ResponseEntity .internalServerError() .body(Result.failure("INTERNAL_ERROR", "系统内部错误")); } }