SaTokenConfigure.java 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package com.qnfhq.config;
  2. import cn.dev33.satoken.context.SaHolder;
  3. import cn.dev33.satoken.filter.SaServletFilter;
  4. import cn.dev33.satoken.router.SaRouter;
  5. import cn.dev33.satoken.stp.StpUtil;
  6. import cn.dev33.satoken.util.SaResult;
  7. import com.qnfhq.common.exception.ErrorCode;
  8. import com.qnfhq.common.redis.RedisUtils;
  9. import jakarta.annotation.Resource;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.springframework.context.annotation.Bean;
  12. import org.springframework.context.annotation.Configuration;
  13. /**
  14. * [Sa-Token 权限认证] 配置类
  15. */
  16. @Slf4j
  17. @Configuration
  18. public class SaTokenConfigure {
  19. @Resource
  20. RedisUtils redisUtils;
  21. /**
  22. * 注册 [Sa-Token全局过滤器]
  23. */
  24. @Bean
  25. public SaServletFilter getSaServletFilter() {
  26. log.info("---------- Sa-Token 配置 in getSaServletFilter----------");
  27. return new SaServletFilter()
  28. // 指定 拦截路由 与 放行路由
  29. .addInclude("/**")
  30. .addExclude(
  31. "/api/user/register",
  32. "/api/user/login",
  33. "/api/user/captcha",
  34. "/api/user/checkCaptcha",
  35. "/api/user/sendEmailCode",
  36. "/api/user/sendMobileCode",
  37. "/api/user/resetPwdPhone",
  38. "/api/user/resetPwdEmail",
  39. "/api/user/checkPhoneCode",
  40. "/api/user/checkEmailCode"
  41. // "/api/coin/list",
  42. // "/api/user/bindPhoneEmail",
  43. // "/api/timezone/getTimeZone",
  44. // "/ws/**",
  45. // "/api/recall/withdraw/unc",
  46. // "/api/recall/pay/unc",
  47. // "/api/advert/list",
  48. // "/api/helpcenter/**",
  49. // "/api/helpCenterInfo/**",
  50. // "/api/blockcc/ageeTrade",
  51. // "/api/ekyc/**", // 实名认证 - 认证返回函数
  52. // "/api/external/**"
  53. )
  54. // 认证函数: 每次请求执行
  55. .setAuth(obj -> {
  56. log.info("---------- 进入Sa-Token认证函数 ----------");
  57. if (StpUtil.isLogin() == false) {
  58. log.info("---------- 进入Sa-Token认证函数 未登陆----------");
  59. SaRouter.back(new SaResult(ErrorCode.UNAUTHORIZED, "error", (Object) null));
  60. } else {
  61. log.info("---------- 进入Sa-Token认证函数 已登陆----------");
  62. long userId = StpUtil.getLoginIdAsLong();
  63. redisUtils.get("active:UserId:" + userId,2*60*60);
  64. }
  65. })
  66. // 异常处理函数:每次认证函数发生异常时执行此函数
  67. .setError(e -> {
  68. log.info("---------- 进入Sa-Token异常处理 ----------"+e.getMessage());
  69. // System.out.println("---------- 进入Sa-Token异常处理 -----------");
  70. return SaResult.error(e.getMessage());
  71. })
  72. .setBeforeAuth(r -> {
  73. // ---------- 设置一些安全响应头 ----------
  74. SaHolder.getResponse()
  75. // 服务器名称
  76. .setServer("assa")
  77. // 是否可以在iframe显示视图: DENY=不可以 | SAMEORIGIN=同域下可以 | ALLOW-FROM uri=指定域名下可以
  78. .setHeader("X-Frame-Options", "SAMEORIGIN")
  79. // 是否启用浏览器默认XSS防护: 0=禁用 | 1=启用 | 1; mode=block 启用, 并在检查到XSS攻击时,停止渲染页面
  80. .setHeader("X-XSS-Protection", "1; mode=block")
  81. // 禁用浏览器内容嗅探
  82. .setHeader("X-Content-Type-Options", "nosniff");
  83. })
  84. ;
  85. }
  86. }