ユーザーがアプリケーションでなんらかのアクティビティを行った場合、次にユーザーがアプリケーションに戻ったときに、同じ PC からの要求であることを確認する方法はありますか?
問題のもう 1 つの側面は、アプリケーションをボットから保護することです。
ソリューションが AS に依存する場合に備えて、Glassfish v3.x にデプロイされた Web アプリケーションについて特に関心があります。私のアプリケーションは JSF2 で作成されましたが、それは問題ではないと思います。
一意のトークンを含む Cookie をブラウザーに書き込み、それをデータベースのユーザー プロファイルに保存することができます。ユーザーが再度ログインすると、一意のトークンがサーバーに渡され、データベースのユーザー プロファイルに保存されているトークンと比較されます。
私はちょっと読んだだけで、MACアドレスを取得することは問題外のようです.HttpServletからクライアントのMACアドレスを取得するにはどうすればよいですか?
注: 戻ってきたユーザーを確実に識別する唯一の方法は、認証を使用することです。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>