首先,我要说的是,我所知道的关于 Spring 和 Jetty 的一切,都是我在尝试调试这个问题的过程中学到的:我在一场 war 中有一个上下文文件,它只是设置身份验证管理器以及 http-basic 安全模型。在一台计算机上,它工作正常,但在另一台计算机上(当然也是我试图部署到的计算机上),jetty 的日志在尝试加载该文件后停止。
该文件没有做任何奇怪的事情,只是几乎遵循网上的每个示例来启动和运行 shell,以便以后进行改进:
<security:http>
<security:http-basic></security:http-basic>
<security:intercept-url pattern="/dcap" access="ROLE_ANONYMOUS"/>
<security:intercept-url pattern="/LCL/**" access="ROLE_ANONYMOUS"/>
<security:intercept-url pattern="/**" access="ROLE_USER" />
</security:http>
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider>
<security:user-service>
<security:user name="test" password="testpass" authorities="ROLE_USER" />
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
现在,我已经尝试过了,如果我注释掉第一个 block ,我会得到相同的结果,如果我注释掉第二个 block ,我会得到相同的结果。然而,如果我注释掉这两个 block ,Jetty 实际上会启动,而不是在配置阶段挂起,而是抛出一个找不到 springSecurityFilterChain 的异常,这当然是有道理的。
所以,我想我的问题是,机器环境中可能存在哪些差异,导致该文件在一台机器上无法加载,而在另一台机器上工作? (我担心可能是在它正在运行的机器上我使用的是sun jvm,而在我所在的机器上,我必须使用openjdk。)我可以采取任何其他步骤吗?如何调试像这样 Jetty 的启动日志停止的问题?
请您参考如下方法:
问题是 RNG 中的熵不足。下载并安装 RNG 工具,并将其插入 urandom,效果非常好。