AuthAspect.java 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package nju.seec.helper.aspect.auth;
  2. import nju.seec.helper.util.Consts;
  3. import nju.seec.helper.dto.LoginUser;
  4. import nju.seec.helper.util.exception.HelperException;
  5. import org.aspectj.lang.JoinPoint;
  6. import org.aspectj.lang.annotation.Aspect;
  7. import org.aspectj.lang.annotation.Before;
  8. import org.springframework.beans.BeanUtils;
  9. import org.springframework.stereotype.Component;
  10. import org.springframework.web.context.request.RequestContextHolder;
  11. import org.springframework.web.context.request.ServletRequestAttributes;
  12. import javax.servlet.http.HttpSession;
  13. import java.util.Arrays;
  14. import java.util.Objects;
  15. import java.util.stream.Collectors;
  16. /**
  17. * @author cst
  18. */
  19. @Aspect
  20. @Component
  21. public class AuthAspect {
  22. @Before("execution(public * nju.seec.helper.controller.*.*(..)) && @annotation(auth)")
  23. public void authCheck(JoinPoint joinPoint, Auth auth) {
  24. HttpSession session =
  25. ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes()))
  26. .getRequest()
  27. .getSession();
  28. LoginUser user = (LoginUser) session.getAttribute(Consts.SESSION_USER_NAME);
  29. if (user == null) {
  30. throw HelperException.of(HelperException.ExceptionType.NOT_LOGIN, "您未登录");
  31. } else if (!Arrays
  32. .stream(auth.roles())
  33. .collect(Collectors.toSet())
  34. .contains(user.getType())) {
  35. throw HelperException.of(HelperException.ExceptionType.FORBIDDEN, String.format("您暂时无法%s,请重新登录", auth.message()));
  36. }
  37. Object[] objects = joinPoint.getArgs();
  38. for (Object o : objects) {
  39. if (o.getClass() == LoginUser.class) {
  40. BeanUtils.copyProperties(user, o);
  41. break;
  42. }
  43. }
  44. }
  45. }