V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
fuxinya
V2EX  ›  程序员

[RESTful API] 如何放行不需要 token 验证的接口

  •  
  •   fuxinya · 2019-03-28 10:02:20 +08:00 · 5761 次点击
    这是一个创建于 2085 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Spring boot 项目。现有接口

    1. 获取商品资源 GET api/goods/{goodsId}

    2. 修改商品资源 PUT api/goods/{goodsId}

    二者路径相同,GET 方法任何人都可以访问,无需登录,但是 PUT 需要登录验证 token

    问题来了,项目中有个 token 拦截器 Interceptor,验证并从 token 里拿到用户 id,但是白名单 excludePathPatterns 却是按路径匹配的,只要符合此路径,无论什么方法( GET, PUT )都会放行,导致 PUT 接口出现问题,拿不到用户 id。

    如何解决?

    11 条回复    2019-03-28 16:38:24 +08:00
    zhazi
        1
    zhazi  
       2019-03-28 10:07:27 +08:00   ❤️ 1
    写个注解在被访问的函数上,拦截器判断到直接忽略校验
    zhazi
        2
    zhazi  
       2019-03-28 10:08:38 +08:00
    想当然了,不知道是啥语言,思路是这样
    zhazi
        3
    zhazi  
       2019-03-28 10:09:07 +08:00
    又看到 springboot 第二条当我没说
    fuxinya
        4
    fuxinya  
    OP
       2019-03-28 10:13:08 +08:00
    @zhazi 我傻了,这个方法咋就没想到呢,spring 核心就是 AOP,忘本了
    qwx
        5
    qwx  
       2019-03-28 10:46:10 +08:00
    修改拦截器代码,让其不仅针对 path,同时也必须匹配方法。
    youngxhui
        6
    youngxhui  
       2019-03-28 11:50:32 +08:00   ❤️ 1
    使用 spring boot Security 框架,把不需要校验的路径写进去
    zorui
        7
    zorui  
       2019-03-28 12:20:59 +08:00   ❤️ 1
    spring boot Security 我记得是可以验证 method 的。
    AlisaDestiny
        8
    AlisaDestiny  
       2019-03-28 12:30:38 +08:00   ❤️ 1
    HandlerInterceptor 的 preHandle 方法的第三个参数就是 HandlerMethod 实例,获取 method 上的注解,判断有没有特定注解就行了。so easy.
    jorneyr
        9
    jorneyr  
       2019-03-28 14:05:13 +08:00   ❤️ 1
    <intercept-url pattern="/api/schools" access="permitAll" method="GET"/>

    这个是普通的 Spring MVC 中 Spring Security 的,SpringBoot 应该有相似的办法。
    Jonz
        10
    Jonz  
       2019-03-28 15:32:01 +08:00
    ··· java
    if (method.isAnnotationPresent(IgnoreToken::class.java)) {
    val passToken = method.getAnnotation(IgnoreToken::class.java)
    if (passToken.required) {
    return true
    }
    }
    ···

    我项目里是自定义 IgnoreToken 注解来处理
    fuxinya
        11
    fuxinya  
    OP
       2019-03-28 16:38:24 +08:00
    @Jonz 谢谢回复,目前就是用的判断注解的方法
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3048 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 10:50 · PVG 18:50 · LAX 02:50 · JFK 05:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.