【问题标题】:Session management for a RESTful Web Service using Jersey使用 Jersey 的 RESTful Web 服务的会话管理
【发布时间】:2012-08-22 10:03:15
【问题描述】:

我正在我的Android, iPhone 应用程序和 MySQL 之间开发一个Restful Web Service using Jersey。我还使用Hibernate 将数据映射到数据库。

我有一个 sessionId(密钥)。它是在用户登录系统时生成的。

User类中:

public Session daoCreateSession() {
    if (session == null) {
        session = new Session(this);
    } else {
        session.daoUpdate();
    }
    return session;
}

Session 班级:

Session(User user) {
    this.key = UUID.randomUUID().toString();
    this.user = user;
    this.date = new Date();
}

void daoUpdate() {
    this.key = UUID.randomUUID().toString();
    this.date = new Date();
}

当用户成功登录系统时,我将此 sessionId 发送到移动应用程序客户端。然后,当我想根据登录的用户从数据库中获取一些信息时,我会检查这个Session key 作为每个请求的身份验证in the REST Services

例如用户参与的项目列表,我使用client.GET(SERVER_ADDRESS/project/get/{SessionID})

插入client.GET(SERVER_ADDRESS/project/get/{username})

如果它不是有效的会话密钥,我将向客户端发送 403 禁止代码。 也可以看看here

问题是我不确定我的方法。您如何看待 cons 在考虑泽西岛和移动应用程序的这种方法中? 我仍然不知道 Session key 方法对我来说是否是个好主意。

【问题讨论】:

  • 这不是 RESTful。 SessionID 将发生变化,因此您的 URL 将引用资源。
  • 为什么?我只用this approach
  • 一个 URL 标识一个资源。你的资源是什么?
  • 不,MySQL 是您的后端。在您的上下文中,项目和用户是资源。请阅读brief introduction to REST
  • 好的,谢谢,你是对的,但你已经知道你的问题的答案了:)

标签: spring hibernate rest spring-security jersey


【解决方案1】:

如果你想使用 SessionId 那么它应该有一个验证时间,像这样:

private static final int MINUTES = 90;

public boolean isValid() {
   return System.currentTimeMillis() - date.getTime() < 1000 * 60 * MINUTES;
}

【讨论】:

    【解决方案2】:

    这是一个已解决的问题 - 像 Tomcat 这样的 servlet 容器已经进行了会话管理,并且可以通过 TCP 广播或使用 memcache 等共享数据源将会话状态分发到集群中的其他容器。

    我建议阅读已有的内容,而不是无意中重新发明轮子。此外,如果您的应用程序被证明很受欢迎,这将成为一个非常热门的表格。您将如何清除旧的会话 ID?

    【讨论】:

    • 用户每次登录系统都会生成一个新的会话ID,也是临时ID,过一段时间就过期了。
    • 如果您期望高负载,那么每个请求都需要对同一个表进行操作会很糟糕。每次登录都需要写入,所有其他操作都需要读取无法有效索引的大表(UUID 对此不利),然后您需要一个后台线程来扫描表并删除过期的会话 ID ,否则表格将填满无用的数据。我真的强烈建议您考虑使用由code.google.com/p/memcached-session-manager 支持的 Tomcat 内置会话管理
    • 他实际上是在为无会话请求创建一个令牌系统。
    猜你喜欢
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 2014-09-13
    • 2017-05-24
    • 1970-01-01
    相关资源
    最近更新 更多