6

アプリとMySQLの間でJerseyを使用してRestfulWebサービスを開発しています。また、データをデータベースにマップするためAndroid, iPhoneにも使用します。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をモバイルアプリクライアントに送信します。次に、ログインしたユーザーに基づいてデータベースから情報を取得する場合、すべての要求の認証としてこのセッションキーを確認します。in the REST Services

たとえば、ユーザーが関与しているプロジェクトのリストには、client.GET(SERVER_ADDRESS/project/get/{SessionID})

のはめ込みclient.GET(SERVER_ADDRESS/project/get/{username})

また、有効なセッションキーでない場合は、403禁止コードをクライアントに送り返します。こちらもご覧ください

問題は、自分のアプローチがよくわからないということです。consジャージーとモバイルアプリを考慮して、このアプローチでどう思いますか?Session key私の場合、このアプローチが良いアイデアかどうかはまだわかりません。

4

2 に答える 2

6

SessionIdを使用する場合は、次のような検証時間が必要です。

private static final int MINUTES = 90;

public boolean isValid() {
   return System.currentTimeMillis() - date.getTime() < 1000 * 60 * MINUTES;
}
于 2012-09-04T17:52:27.220 に答える
4

これは解決された問題です。Tomcatなどのサーブレットコンテナはすでにセッション管理を行っており、TCPを介してブロードキャストするか、memcacheなどの共有データソースを使用して、クラスタ内の他のコンテナにセッション状態を配布できます。

不注意で車輪の再発明をするのではなく、すでに利用可能なものを読んでおくことをお勧めします。さらに、アプリケーションが人気を博した場合、これは非常にホットなテーブルテーブルになります。古いセッションIDをどのようにクリアしますか?

于 2012-09-03T10:30:45.720 に答える