为什么java安全管理器既不禁止创建新的Thread()也不禁止它?

你碰巧知道解释为什么java安全管理器不禁止创建新线程或启动它们吗?新的FileWriter在安全管理器下,但新的Thread()和threadInstance.start()都不是更安全的安全管理器,并且可以调用.

>禁止它会不会有用吗?
>难以实施吗?
>或者创建和启动新线程并不是那么禁止它?

解决方法:

在Thread构造函数中执行访问检查,以查看调用者是否有权更改将添加新线程的ThreadGroup.这就是你如何实现安全策略以禁止创建新线程.

(还有一个关于创建ThreadGroups的检查……检查你是否有权将新组添加到其父组.)

那么回答你的问题:

Why java security manager doesn’t forbid neither creating new Thread() nor starting it?

原因是您的JVM当前安全策略允许父线程修改其ThreadGroup.您应该能够修改该策略设置以防止这种情况,从而阻止创建子线程.

Wouldn’t it be useful to forbid it?

它是.允许不受信任的代码创建/启动线程是不明智的,因为:1)线程一旦启动就无法安全地被杀死,2)创建/启动大量线程可能会使JVM(可能是操作系统)陷入困境.

Would it be hard to implement?

从您的角度来看,只需更改策略即可.

上一篇:开源规则引擎 drools


下一篇:将Tomcat与Java SecurityManager一起使用?