sa-token配置路由拦截放行Swagger路径

本文探讨了在集成Swagger API文档时遇到的无token访问错误,通过放行特定路径并分析异常追踪,揭示了如何配置Swagger以解决未登录异常。重点关注了放行路径设置和登录验证机制的交互。

在交流群里一个老生常谈的问题,集成swagger后访问报错,无token,放行路径如下

 //放行路径
    private static final String[] EXCLUDE_PATH_PATTERNS = {
        // Swagger
        "**/swagger-ui.html", 
        "/swagger-resources/**", 
        "/webjars/**",
        "/v2/**",
        "/swagger-ui.html/**",
        "/doc.html/**",
        "/error",
        "/favicon.ico",
        "sso/auth",
        "/csrf"
}

当然  后台还是一样有异常输出  然后在跟踪后发现  最后要放行的路径是 /  这个就算了

2022-02-11 17:43:40.016  INFO 928 --- [   scheduling-1] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
/
2022-02-11 17:43:56.382 ERROR 928 --- [nio-5001-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is cn.dev33.satoken.exception.NotLoginException: 未提供Token] with root cause

### 实现 sa-token 的接口白名单配置Sa-Token 中,可以通过注册路由拦截器来实现基于路径的权限控制。对于需要放行的接口(即白名单),可以利用 `setNotFilter` 方法将其排除在外[^1]。 以下是具体的实现方法: #### 1. 注册路由拦截器并设置白名单 通过调用 `SaHttpFilter.setNotFilter()` 方法指定不需要被拦截的 URL 路径列表。这些路径会被自动跳过鉴权逻辑。 ```java import cn.dev33.satoken.filter.SaServletFilter; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; public class SaTokenConfig { @Bean public FilterRegistrationBean<SaServletFilter> registerSaTokenFilter() { FilterRegistrationBean<SaServletFilter> registrationBean = new FilterRegistrationBean<>(); // 创建过滤器实例 SaServletFilter filter = new SaServletFilter() .setTtlSecond(60 * 60) // Token有效期,默认一小时 .setNotFilter("/login", "/logout", "/api/public/**"); // 设置无需拦截的URL registrationBean.setFilter(filter); registrationBean.addUrlPatterns("/*"); return registrationBean; } } ``` 上述代码中设置了 `/login`, `/logout`, 和 `/api/public/**` 这些路径不会受到任何拦截操作的影响。 #### 2. 动态调整白名单 如果项目运行期间需要动态修改白名单,则可通过自定义存储机制保存允许访问的路径集合,并在每次请求到达时判断当前路径是否属于该集合。 ```java // 自定义逻辑:检查当前请求路径是否位于白名单内 filter.setAuth(obj -> { String requestPath = obj.getRequest().getRequestURI(); List<String> whiteListPaths = getDynamicWhiteList(); // 获取动态白名单 boolean isWhiteListed = false; for (String path : whiteListPaths) { if (AntPathMatcher.match(path, requestPath)) { // 使用通配符匹配 isWhiteListed = true; break; } } if (!isWhiteListed && !StpUtil.isLogin()) { throw new NotLoginException(); // 如果未登录则抛出异常 } }); ``` 在此处引入了一个工具类 `getDynamicWhiteList()` 来获取实时更新后的白名单数据源。 --- ### 总结 以上展示了两种方式用于处理 sa-token 下的接口白名单管理问题——静态声明与动态维护。前者适合于固定不变的需求场景;后者更适合复杂业务环境下灵活应对变化的能力提升。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值