2012-04-07 2 views
2

ユーザーがアプリケーションで何らかのアクティビティを行った場合、ユーザーが次回アプリケーションに戻るときに同じPCから要求が送信されたことを確認する方法はありますか?
もう1つの問題は、アプリケーションをボットから保護することです。私はGlassfishのv3.x.にデプロイされたWebアプリケーションのために、この中に特に興味がある、などの溶液が依存念のjavaで作成されたWebアプリケーションへのリクエストが同じクライアントから来ていることを認識する方法はありますか?

私のアプリケーションはJSF2で作成されましたが、それは重要ではないと思います。

+0

クッキー?それらはマシン固有のものです。 – DOK

+0

@ Jmort253、チップをありがとう。私はそれが私にボットからの要求を認識するのに役立つかどうか疑問に思っていますか? – jjd

+0

申し訳ありませんが、@DOK、私はUIの使用を取得していないと間違った場所を見てみましょう。以前のコメントはあなたに向けられていました。 – jjd

答えて

2

あなたはユニークなトークンが含まれてブラウザにクッキーを書いて、データベースのユーザプロファイルにそれを格納することができます。ユーザーが再度ログインすると、サーバーに一意のトークンを渡し、データベース内のユーザープロファイルに格納されているトークンと比較します。

私はいくつかの読み取りを行なったし、それはMACアドレスを取得して表示されますが問題外です:how to get a client's MAC address from HttpServlet?

+0

、私もこれを研究し、同じ結論に達しました。ボットのために動作するか教えてください。クライアントの側でクッキーが禁止されている場合はどうなりますか? – jjd

1

注:確実に戻って、ユーザを識別するための唯一の方法は、認証を経ています。クッキーを使用すると、実際には同じブラウザから接続を返すかどうかを確認しています。

ユーザーがCookieを消去した場合、ブラウザを再インストールする場合、別のブラウザを使用する場合、または別のコンピュータを使用した場合、Webアプリケーションはそれらを覚えていない可能性があります。それで、ここでは認証なしで返送するユーザーを識別する方法の1つがあります。

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

は、複数のページ要求間でユーザーを識別したり、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> 
+0

はセッションCookieの一時Cookieではありませんか?そうであれば、別のブラウザセッションで、または1週間後に使用が戻った場合に問題が発生します。私は彼らが後でまともな時間をユーザに検出しようとしていると思う。私は永続的なクッキーを提案しましたが、いずれの方法も妨害する大量の状況が依然として存在する可能性があります。 –

+0

セッションタイムアウトはweb.xmlファイルで制御できます。これをHttpSessionオブジェクトに対して動的に設定することもできます。詳細については、javadocsを参照してください。私はまた、HttpSessionのjavadocからの最初の文で私の答えを更新しました: "複数のページ要求にわたってユーザーを識別する方法や、Webサイトにアクセスしてそのユーザーに関する情報を保存する方法を提供します。"ほとんどの場合、セッションは一般に認証されたユーザーに使用されるのが正しいと思います。これはルールではなく、単なる一般的な観察です。私はあなたがセッションを使うのが間違っているとは思わない。 – jmort253

+0

@ kmb385 - クッキーをクリアしたり、別のブラウザを使用したり、別のコンピュータを使用したりすると、ユーザーを検出しないということは正しいでしょう。返信するユーザーを確実に識別する唯一の方法は、ユーザー名/パスワード、OAuth、openidなどで認証してください。 – jmort253

関連する問題