【问题标题】:Avoid session replication in Spring rest application using Cookies使用 Cookie 避免 Spring REST 应用程序中的会话复制
【发布时间】:2015-09-17 00:03:03
【问题描述】:

我正在使用mysql 数据库和tomcat 服务器处理Spring 4 mvc 应用程序。 基本上,我正在创建一个 Spring rest 将被 Angular JS 使用。

注意:我没有使用Spring security

为了避免在clustered environment的情况下进行会话复制,我使用cookie方法。登录时,我正在生成one unique session idusing java UUID)并使用它创建一个cookie然后设置响应中的 cookie。此外,将该会话 ID 与任何用户数据一起存储在数据库中。

为了验证每个 REST API,我编写了一个 Spring interceptor,它将拦截每个 REST API 调用,进而检查请求中是否有 cookie。如果存在,我正在获取会话 id 值和使用它,进行数据库调用以检查它是否有效。注销时,我正在删除 cookie。

根据我上面的解释,我有几个问题:

1) Is my approach correct? or do you see any flaw in it.  
2) Let me know if there is any other better method to achieve the same i.e. to avoid session replication.  
3) Since, I am not using any HTTP session, how do I achieve something like session-timeout or do i even need it?

【问题讨论】:

    标签: java session cookies spring-restcontroller spring-rest


    【解决方案1】:

    1) 我的方法正确吗?或者你看到它有什么缺陷吗?

    这是一个很好的方法。只是按优先顺序排列的几点:-

    • 如果您使用 API 来处理 很多 的请求,请考虑使用内存缓存而不是 DB。去DB相对要贵得多。 Alot 我知道是主观的,这取决于您的设置,但只需考虑您希望在会话之外存在的数据的数据库。最好使用更临时/更快的存储,例如用于 API 令牌之类的内存缓存。如果跨集群,则探索分布式缓存解决方案。

    • 使用 cookie 不一定存在安全风险,但对CSRF 有一点了解。在 HTTP 标头而不是 cookie 本身中传递令牌更安全 - 也就是说,如果您担心 CSRF(我确实在我自己的应用程序中使用 Header 方法,但我认为 CSRF 相对罕见,这取决于您的敏感程度数据是)

    2) 让我知道是否有其他更好的方法可以达到相同的效果 即避免会话复制。

    对 1 的响应无需添加任何内容。)

    3) 由于我没有使用任何 HTTP 会话,我该如何实现会话超时或什至需要它?

    使用令牌存储(最好在缓存中)时间戳,并为使用令牌的每个事务在缓存中刷新它。然后,在检查您是否考虑令牌是否有效时,请检查时间戳,您可以决定(根据经过的时间)是否要删除令牌并请求客户端重新进行身份验证。

    【讨论】:

      猜你喜欢
      • 2011-03-31
      • 2020-01-08
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 2014-11-09
      • 1970-01-01
      • 2015-09-23
      • 1970-01-01
      相关资源
      最近更新 更多