我有一个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服务器本身。我怎么能这样做?