【问题标题】:How to do session based filtering servlet authentication如何进行基于会话的过滤 servlet 身份验证
【发布时间】:2017-11-08 07:18:27
【问题描述】:

我目前正在使用过滤器来验证 REST 中给出的凭据和 servlet 中完成的 servlet 调用。

每次发出请求时,它都会从数据库中获取凭据,这每次都是昂贵的操作。

有什么方法可以基于会话进行身份验证,这样就不必每次都从数据库中检索详细信息。

谢谢。

【问题讨论】:

  • 在进行数据库查找后,将一些令牌添加到静态地图并将该令牌添加到用户会话
  • 使用一些缓存实现来代替静态 Map 进行复制和生命周期管理

标签: java session servlets servlet-filters


【解决方案1】:

最好的办法是基于令牌的机制。用户登录后,他将获得一个令牌,然后使用该令牌从客户端重新发送 API 调用将使客户端能够访问 API。

请参考:Implementing authentication with tokens

【讨论】:

    【解决方案2】:

    是的,您可以在用户第一次成功登录时创建令牌并将该令牌保存在缓存服务器中,并在请求来自客户端检查缓存服务器而不是数据库时设置在 cookie 中。根据会话过期时间设置令牌过期时间.

    【讨论】:

      【解决方案3】:

      我看到你有两个选择

      1. 将会话令牌保存在内存中。每个应用服务器都有一种复制内存会话缓存的方法。事实上,它需要一些缓存管理。

      我见过和做过的大多数解决方案都使用了这个选项。

      1. 您可以使用自包含令牌(例如 JWT)过滤器应该能够验证,而无需每次都访问数据库。然后,您将需要一个令牌服务来交换令牌的客户端凭据。

      如果您的客户直接使用他们的凭据(基本身份验证),您可以考虑使用某种方式来使用缓存更安全的令牌(OAuth 2.0)

      当有人有改进或不同意时,请随时发表评论

      【讨论】:

        猜你喜欢
        • 2011-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-01
        • 2012-08-28
        • 2015-08-12
        • 2015-03-04
        • 2019-05-17
        相关资源
        最近更新 更多