PagesAspect.java 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package com.backendsys.modules.common.aspect;
  2. import cn.hutool.core.date.DateUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import com.backendsys.modules.cms.navigation.entity.Navigation;
  5. import com.backendsys.modules.cms.navigation.service.NavigationService;
  6. import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
  7. import com.backendsys.modules.common.utils.CookieUtil;
  8. import com.backendsys.modules.system.service.SysLanguageService;
  9. import jakarta.servlet.http.HttpServletRequest;
  10. import jakarta.servlet.http.HttpServletResponse;
  11. import org.aspectj.lang.annotation.AfterThrowing;
  12. import org.aspectj.lang.reflect.MethodSignature;
  13. import org.springframework.ui.Model;
  14. import com.backendsys.modules.cms.siteinfo.entity.SiteInfo;
  15. import com.backendsys.modules.cms.siteinfo.service.SiteInfoService;
  16. import org.aspectj.lang.JoinPoint;
  17. import org.aspectj.lang.annotation.Aspect;
  18. import org.aspectj.lang.annotation.Before;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.stereotype.Component;
  21. import org.springframework.web.context.request.RequestContextHolder;
  22. import org.springframework.web.context.request.ServletRequestAttributes;
  23. import org.springframework.web.method.HandlerMethod;
  24. import java.io.IOException;
  25. import java.lang.reflect.Method;
  26. import java.util.List;
  27. /**
  28. * 视图自动添加:站点信息、导航
  29. */
  30. @Aspect
  31. @Component
  32. public class PagesAspect {
  33. @Autowired
  34. private HttpRequestUtil httpRequestUtil;
  35. @Autowired
  36. private SysLanguageService sysLanguageService;
  37. @Autowired
  38. private SiteInfoService siteInfoService;
  39. @Autowired
  40. private NavigationService navigationService;
  41. @Before("@annotation(org.springframework.web.bind.annotation.GetMapping) && @annotation(pages)")
  42. public void beforeGet(JoinPoint joinPoint, Pages pages) throws IOException {
  43. HttpServletRequest request = httpRequestUtil.getRequest();
  44. HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
  45. // 从 JoinPoint 获取控制器方法的参数
  46. Object[] args = joinPoint.getArgs();
  47. for (Object arg : args) {
  48. if (arg instanceof Model) {
  49. Model model = (Model) arg;
  50. // [Cookie] 获取/设置默认语言 (默认是:中文)
  51. String lang = CookieUtil.getCurrentLang(request);
  52. model.addAttribute("lang", lang);
  53. // [Get] 获取系统语言列表
  54. model.addAttribute("sysLanguage", sysLanguageService.selectLanguageList());
  55. // [Get] 获取站点信息
  56. SiteInfo siteInfo = siteInfoService.selectSiteInfo();
  57. if (siteInfo == null) {
  58. request.setAttribute("errorMessage", "站点信息不存在 " + "(" + lang + ")");
  59. response.sendRedirect(request.getContextPath() + "/error");
  60. }
  61. model.addAttribute("siteInfo", siteInfoService.selectSiteInfo());
  62. // [Get] 获取导航
  63. model.addAttribute("navigation", navigationService.selectNavigationTemplate(lang));
  64. // 其他信息
  65. model.addAttribute("timestamp", DateUtil.current()); // 当前时间戳
  66. model.addAttribute("request_uri", request.getRequestURI()); // 当前访问路径
  67. model.addAttribute("request_query_string", request.getQueryString()); // 当前访问路径参数
  68. break;
  69. }
  70. }
  71. }
  72. }