单页面的网站ppt制作网站
2026/3/21 13:06:51 网站建设 项目流程
单页面的网站,ppt制作网站,wordpress 开源地图插件,企业号官网入口视频看了几百小时还迷糊#xff1f;关注我#xff0c;几分钟让你秒懂#xff01; 在使用 Sa-Token 做权限控制时#xff0c;我们通常希望#xff1a; /login、/register、/health 等接口 无需登录即可访问#xff1b;Swagger 文档、静态资源、验证码接口 跳过鉴权#…视频看了几百小时还迷糊关注我几分钟让你秒懂在使用Sa-Token做权限控制时我们通常希望/login、/register、/health等接口无需登录即可访问Swagger 文档、静态资源、验证码接口跳过鉴权某些临时调试接口暂时关闭权限校验。但如果你配置了全局拦截器所有请求都会被拦截返回401 Unauthorized怎么办本文将教你三种官方推荐方式安全、灵活地忽略 Sa-Token 鉴权并附上完整 Spring Boot 示例 反例避坑指南 一、前提你已配置全局拦截器假设你已经注册了 Sa-Token 的全局路由拦截器这是最佳实践Configuration public class SaTokenConfig implements WebMvcConfigurer { Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new SaRouteInterceptor()) .addPathPatterns(/**); // 拦截所有请求 } }此时所有接口都需要登录才能访问。我们需要“放行”部分路径。✅ 方法一excludePathPatterns推荐最常用在注册拦截器时直接排除不需要鉴权的路径。Configuration public class SaTokenConfig implements WebMvcConfigurer { Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new SaRouteInterceptor()) .addPathPatterns(/**) .excludePathPatterns( /login, /register, /captcha, /health, /doc.html, /webjars/**, /swagger-resources/**, /v3/api-docs/** ); } }✅优点配置清晰、性能高、无侵入适用场景公开接口、文档、健康检查等✅ 方法二SaIgnore 注解方法级忽略如果你只想忽略某个 Controller 方法可以用SaIgnore注解。1. 确保你的 Sa-Token 版本 ≥ 1.25.02. 在方法上加注解RestController public class PublicController { SaIgnore // ← 忽略 Sa-Token 鉴权 GetMapping(/public/hello) public String hello() { return 无需登录也能访问; } SaIgnore PostMapping(/register) public String register(RequestBody User user) { // 注册逻辑 return 注册成功; } }✅优点精准控制适合临时放行⚠️注意该注解只对 SaRouteInterceptor 生效对自定义拦截器无效✅ 方法三在拦截器中手动放行高级用法如果你有复杂的放行逻辑比如根据 IP、Header 动态判断可以在自定义拦截器中处理。public class CustomSaInterceptor extends SaRouteInterceptor { Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { String uri request.getRequestURI(); // 自定义放行规则 if (uri.startsWith(/api/open/) || isWhiteIp(request)) { return true; // 直接放行不执行父类鉴权 } // 否则走正常 Sa-Token 鉴权 return super.preHandle(request, response, handler); } private boolean isWhiteIp(HttpServletRequest request) { String ip request.getRemoteAddr(); return 127.0.0.1.equals(ip) || 192.168.1.100.equals(ip); } }然后注册这个自定义拦截器Configuration public class InterceptorConfig implements WebMvcConfigurer { Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new CustomSaInterceptor()) .addPathPatterns(/**); } }✅适用场景IP 白名单、内部系统调用、灰度发布等⚠️ 四、反例错误的忽略方式千万别用❌ 反例1在 Controller 里 try-catch 绕过GetMapping(/test) public String test() { try { StpUtil.checkLogin(); // 手动校验 } catch (Exception e) { // 忽略异常 → 表面上能访问但逻辑混乱 } return xxx; }问题代码冗余无法统一管理容易漏掉权限校验。❌ 反例2全局不注册拦截器靠每个方法手动 checkGetMapping(/user) public String user() { StpUtil.checkLogin(); // 每个方法都写 return ...; }后果极易遗漏后期维护成本高违背“约定优于配置”原则。✅ 正确做法用 excludePathPatterns 或 SaIgnore 五、安全注意事项不要过度放行例如excludePathPatterns(/**)→ 等于没鉴权敏感接口即使公开也要做参数校验比如/register虽然免登录但要防刷、防注入。Swagger 路径要放全常见遗漏- /v3/api-docs - /swagger-ui/** - /doc.html - /webjars/springfox-swagger-ui/**生产环境关闭调试接口可通过 profile 控制Profile(dev) SaIgnore GetMapping(/debug/clear-cache) public String clear() { ... } 六、完整示例项目结构src/main/java └── com.example.satoken ├── config/SaTokenConfig.java ← 拦截器配置 ├── controller │ ├── AuthController.java ← /login放行 │ ├── UserController.java ← /user/info需登录 │ └── PublicController.java ← /public/helloSaIgnore └── SatokenApplication.java测试流程访问/login→ 成功放行访问/user/info→ 返回 401未登录登录后携带 token 访问/user/info→ 成功访问/public/hello→ 无需 token 也能访问 总结如何选择忽略方式场景推荐方式公开接口登录、注册、健康检查excludePathPatterns个别方法临时放行SaIgnore动态规则IP、Header 判断自定义拦截器整个模块免鉴权excludePathPatterns(/open/**)记住鉴权要严放行要明合理使用忽略机制既能保证安全又不失灵活性。视频看了几百小时还迷糊关注我几分钟让你秒懂

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询