| | |
| | | package com.ruoyi.framework.config; |
| | | |
| | | import cn.dev33.satoken.interceptor.SaAnnotationInterceptor; |
| | | import cn.dev33.satoken.interceptor.SaRouteInterceptor; |
| | | import cn.dev33.satoken.jwt.StpLogicJwtForStyle; |
| | | import cn.dev33.satoken.interceptor.SaInterceptor; |
| | | import cn.dev33.satoken.jwt.StpLogicJwtForSimple; |
| | | import cn.dev33.satoken.router.SaRouter; |
| | | import cn.dev33.satoken.stp.StpLogic; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import com.ruoyi.common.helper.LoginHelper; |
| | | import cn.dev33.satoken.stp.StpUtil; |
| | | import com.ruoyi.common.utils.spring.SpringUtils; |
| | | import com.ruoyi.framework.config.properties.ExcludeUrlProperties; |
| | | import com.ruoyi.framework.config.properties.SecurityProperties; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.web.servlet.config.annotation.InterceptorRegistry; |
| | | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | |
| | | /** |
| | | * sa-token 配置 |
| | |
| | | @Override |
| | | public void addInterceptors(InterceptorRegistry registry) { |
| | | // 注册路由拦截器,自定义验证规则 |
| | | registry.addInterceptor(new SaRouteInterceptor((request, response, handler) -> { |
| | | registry.addInterceptor(new SaInterceptor(handler -> { |
| | | ExcludeUrlProperties excludeUrlProperties = SpringUtils.getBean(ExcludeUrlProperties.class); |
| | | // 登录验证 -- 排除多个路径 |
| | | SaRouter |
| | | // 获取所有的 |
| | | .match("/**") |
| | | // 排除下不需要拦截的 |
| | | .notMatch(securityProperties.getExcludes()) |
| | | .notMatch(excludeUrlProperties.getExcludes()) |
| | | // 对未排除的路径进行检查 |
| | | .check(() -> { |
| | | Long userId = LoginHelper.getUserId(); |
| | | if (ObjectUtil.isNotNull(userId)) { |
| | | // 有效率影响 用于临时测试 |
| | | // if (log.isDebugEnabled()) { |
| | | // log.debug("剩余有效时间: {}", StpUtil.getTokenTimeout()); |
| | | // log.debug("临时有效时间: {}", StpUtil.getTokenActivityTimeout()); |
| | | // } |
| | | } |
| | | // 检查是否登录 是否有token |
| | | StpUtil.checkLogin(); |
| | | |
| | | // 有效率影响 用于临时测试 |
| | | // if (log.isDebugEnabled()) { |
| | | // log.debug("剩余有效时间: {}", StpUtil.getTokenTimeout()); |
| | | // log.debug("临时有效时间: {}", StpUtil.getTokenActivityTimeout()); |
| | | // } |
| | | |
| | | }); |
| | | }) { |
| | | @SuppressWarnings("all") |
| | | @Override |
| | | public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { |
| | | LoginHelper.clearCache(); |
| | | } |
| | | }).addPathPatterns("/**"); |
| | | registry.addInterceptor(new SaAnnotationInterceptor()).addPathPatterns("/**"); |
| | | })).addPathPatterns("/**"); |
| | | } |
| | | |
| | | @Bean |
| | | public StpLogic getStpLogicJwt() { |
| | | // Sa-Token 整合 jwt (Style模式) |
| | | return new StpLogicJwtForStyle(); |
| | | // Sa-Token 整合 jwt (简单模式) |
| | | return new StpLogicJwtForSimple(); |
| | | } |
| | | |
| | | } |