Thanks a lot for your information.

This solution is based on tomcat level.  If I always handle this issue at java 
level, I'm afraid it has performance issue. Because this web site afford a very 
big concurrency access.


Taking a consideration on its basic architect tomcat+apache, I think the best 
way to move this solution from tomcat to apache. So do you have some good 
solution at apache's configuration?  I understand this is a mail list for 
tomcat.. but just want to get any information


Thanks,


At 2015-05-19 04:00:28, "Christopher Schultz" <ch...@christopherschultz.net> 
wrote:
>-----BEGIN PGP SIGNED MESSAGE-----
>Hash: SHA256
>
>To whom it may concern,
>
>On 5/18/15 11:44 AM, javalishixml wrote:
>> I have a website. It is built by apache + tomcat.
>> 
>> Now we make a lottery activity at this website. But we find that
>> some robots always raise the duplicated requests to hit this
>> lottery activity. It causes that robots almost get all the awards.
>> 
>> So we just want to block these kind of duplicated requests at every
>> interval unit. For example, we set the interval unit is 3 seconds.
>> The if the robot want to hit the lottery activity in 3 seconds, the
>> website could block this action.
>> 
>> So how to do it? I suppose if we do it at tomcat level, is it a
>> very low performance? Can I do it at apache level? how to do it? If
>> I could not do it apache level, can I do it by setting sth at
>> tomcat?
>
>If you have a way to identify a "duplicate" request (e.g. using a
>fingerprint of the request that you can check during that 3-second
>interval), then this is conceptually very easy.
>
>It may not be great for performance, but you'll have to weigh that
>against your own requirements. (For example, which is worse: poor
>performance, or a site where only robots ever win the lottery?)
>
>This will not be something you can configure in Apache httpd or
>Tomcat. This will have to be an application thing (unless you can
>describe the fingerprint technique to some httpd module such as
>mod_security or mod_qos and then allow it to discard duplicates).
>
>Back to the solution:
>
>1. Take a fingerprint of the request
>2. Lookup the fingerprint in a database of previous requests
>   ( fingerprint -> latest timestamp )
>3. If the fingerprint appears in your database and the timestamp is
>less than 3 seconds ago, discard the request
>4. Otherwise, store the current timestamp and fingerprint in the databas
>e
>
>For a database, I might recommend something like memcached or another
>in-memory-style database. An in-memory key-value store is really what
>you are looking for. Memcached has a nice feature where values can
>automatically time-out (e.g. they are invalid after 3 seconds), so you
>can make your application code a bit simpler because you'll never have
>a value in the database that is not valid.
>
>Hope that helps,
>- -chris
>-----BEGIN PGP SIGNATURE-----
>Version: GnuPG v2
>Comment: GPGTools - http://gpgtools.org
>
>iQIcBAEBCAAGBQJVWkTcAAoJEBzwKT+lPKRYnW0QAIeRbfJtsTKtUZHUig9sIRre
>y1mgJkPxBXjcRTfoZkZkTPhasYzINE1mb1mTPKfPbQveH+OmpawDREWJxg/6dFeg
>af734ZRpBOAs4MtlCyTXgBUWpWka5CcpeIRYeEwx5GKPFLJfTBbGpswV3HwLaoEC
>/NqMByVfwHnixBxSTGAM2GIOyrPf+Ii1Z0JpQyDEYcZUS3Dc3IFFeHPTvzQUb1SO
>NB84fwjDT6GG/YerrlRV3GHL3WYhAw1n+tQ9cCpSWDvz8/KLUyKXqVjX5s/FbuB+
>S+krz2jzKqxG8bdeixW4s0i/9gyA/KcSSDgwmBnRwHsIUDvfF3pzk1Vq7rfGNpmQ
>L9V4brxL41H+ZMIDt2NjkVJb/UjgMnL5RpfQ1t+MdNvys/7UYav+vOv8jWqI3Mse
>AXNv46mQZAiMFzs/nsR7OIVLLxU70l+wbys4mK6u34uDip5gzxvVSaYKviqgKspx
>LT6MUHOpgmBhsiCUxjJ5odA4Q6mYhMfQxOB+6Ej8jRfKMT2uDTlwvU8gZ+/7TcUX
>JXngjQLQyjj+gAO+7jS7sWpaakV1ojy8/nFBVWH/3tWoo0YD89DJCRWxA8x8slfx
>oI9BGA0T7EwuX1CnqM90OLw7dymMQvwsTlkPAZnIvnWw3Xz29hIRazxQ7NR3AdCk
>vNXsseUzO18IJ4n+By1G
>=Q/ki
>-----END PGP SIGNATURE-----
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>For additional commands, e-mail: users-h...@tomcat.apache.org
>

Reply via email to