2

ユーザーがアプリケーションでなんらかのアクティビティを行った場合、次にユーザーがアプリケーションに戻ったときに、同じ PC からの要求であることを確認する方法はありますか?
問題のもう 1 つの側面は、アプリケーションをボットから保護することです。

ソリューションが AS に依存する場合に備えて、Glassfish v3.x にデプロイされた Web アプリケーションについて特に関心があります。私のアプリケーションは JSF2 で作成されましたが、それは問題ではないと思います。

4

2 に答える 2

2

一意のトークンを含む Cookie をブラウザーに書き込み、それをデータベースのユーザー プロファイルに保存することができます。ユーザーが再度ログインすると、一意のトークンがサーバーに渡され、データベースのユーザー プロファイルに保存されているトークンと比較されます。

私はちょっと読んだだけで、MACアドレスを取得することは問題外のようです.HttpServletからクライアントのMACアドレスを取得するにはどうすればよいですか?

于 2012-04-07T18:01:56.543 に答える
1

注: 戻ってきたユーザーを確実に識別する唯一の方法は、認証を使用することです。Cookie を使用すると、同じブラウザから返される接続を実際に確認できます。

ユーザーが Cookie を消去したり、ブラウザーを再インストールしたり、別のブラウザーを使用したり、別のコンピューターを使用したりすると、Web アプリケーションはおそらくそれらを記憶しません。そうは言っても、認証なしで戻ってきたユーザーを識別する1つの方法を次に示します。

HttpSessionは、戻ってきたユーザーを検出する 1 つの方法です。ユーザーが Web アプリケーションでアクティビティを行っている場合、そのユーザーを一意に識別するキーを格納できます。これにより、ブラウザーに Cookie が配置され、ユーザーが戻ったときに Web アプリケーションがセッションからそのデータを取得できるようになります。

HttpSession javadocs から:

複数のページ要求または Web サイトへのアクセスでユーザーを識別し、そのユーザーに関する情報を保存する方法を提供します。

ユーザー アクティビティを記録します。

ArrayList activity = new ArrayList<String>();

activity = (ArrayList<String>) request.getSession().getAttribute("activity");

if(activity == null)
    activity = new ArrayList<String();

activity.add("Searched for parts for Ford Thunderbird");
request.getSession().setAttribute("activity", activity);

ユーザー アクティビティの表示:

ArrayList activity = new ArrayList<String>();
activity = (ArrayList<String>) request.getSession().getAttribute("activity");

if(activity == null) {
    log.info("No activity to display. New user");

} else {
    for(String a : activity) {
        log.info(a);
    }
}

web.xml でタイムアウトを設定します。

<!-- Define the default session timeout for your application,
     in minutes.  From a servlet or JSP page, you can modify
     the timeout for a particular session dynamically by using
     HttpSession.getMaxInactiveInterval(). -->

<session-config>
  <session-timeout>30</session-timeout>    <!-- 30 minutes -->
</session-config>
于 2012-04-07T18:04:46.513 に答える