【问题标题】:Shiro: Is it possible to get the URL in doGetAuthenticationInfo(AuthenticationToken token)Shiro:是否可以在 doGetAuthenticationInfo(AuthenticationToken token) 中获取 URL
【发布时间】:2018-01-06 05:33:26
【问题描述】:

我正在尝试在 google appengine 上使用 Jersey 框架创建一个 RESTful Web 服务。我正在使用 apache shiro 进行身份验证。

假设我有以下场景:

  1. 预配置了一个管理员用户,该用户可以创建其他用户并离线向每个用户提供用户名和密码。
  2. 对于普通用户,有许多 REST API。有一个 API: GET /tokenInfo 应该使用用户名和密码进行身份验证,并返回 UserId 和令牌作为响应。
  3. 对于所有其他 REST API,我希望用于身份验证的凭据是 UserId 和 Token 而不是用户名和密码。
  4. 因此,基本上这是一种用于身份验证的凭据对因 API 而异的情况。

我怎样才能在 shiro 中实现这一点。据我了解, doGetAuthenticationInfo() 传递客户端发送的凭据并希望您进行验证,但在这种情况下,我需要知道调用了哪个 API。那么有没有办法获取网址呢? 如果没有,那么还有什么其他方法可以实现这一目标?

【问题讨论】:

    标签: rest google-app-engine jersey shiro


    【解决方案1】:

    听起来您需要创建一个自定义过滤器,以构建您想要传递给您的领域的令牌类型,以一个默认值为例: https://shiro.apache.org/web.html#default-filters

    【讨论】:

    • 对不起,我不明白。什么是“构建您要传递的令牌类型”,如果我理解正确,传递的令牌是请求中收到的凭据对。再次澄清我的问题:我基本上有两组凭据对:1. Username(String/Long) : Password(String) OR 2. UserId(Long) : Token(String) 对于一组 API,我想使用凭据对#1,对于另一组API,我想使用凭据对#2。所以当我收到带有一些凭据的请求时,我如何知道在不知道URL 的情况下要对哪对进行身份验证?
    • 好的,我想我现在明白了。我创建了一个扩展“BasicHttpAuthenticationFilter”的自定义过滤器。我已经覆盖了“createToken()”方法,它返回的对象也有 URL。有了这个,我就可以在“doGetAuthenticationInfo()”函数中获取 URL。
    猜你喜欢
    • 2012-04-29
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 2012-04-19
    相关资源
    最近更新 更多