私はTomcat Javaアプリケーションを持っていて、それを安全にしたいので、危険だと思われるすべてのアクションをブロックするカスタムSecurityManagerを作成しました(おそらくいくつか見逃しましたが、それは別の質問です)。しばらくは問題なく動作していましたが、アプリケーションが動作しなくなり、catalina.out に次のメッセージが表示されました。
12/07/2011 10:31:42 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler process
SEVERE: Error reading request, ignored
java.lang.SecurityException
at gwtchat.server.ScriptBotSecurityManager.checkWrite(ScriptBotSecurityManager.java:167)
at java.io.FileOutputStream.<init>(FileOutputStream.java:234)
at java.net.SocketOutputStream.<init>(SocketOutputStream.java:58)
at java.net.AbstractPlainSocketImpl.getOutputStream(AbstractPlainSocketImpl.java:411)
at java.net.Socket$3.run(Socket.java:857)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.Socket.getOutputStream(Socket.java:854)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:163)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:636)
最初の行で、gwtchat.server.ScriptBotSecurityManager は私のカスタム SecurityManager であり、関数は checkWrite(FileDescriptor fd) です。これは、アプリケーションでファイルに書き込みたくないのでブロックしました。
もちろん、Tomcat サーバー自体ではなく、アプリケーションのみをブロックしたいと考えています。これどうやってするの?