忽略Jetty中的web.xml安全性约束

时间:2012-12-05 09:43:15

标签: java-ee spring-security jetty jboss7.x web.xml

在我们的web.xml中,我们有类似

的内容
 <security-constraint>
    <auth-constraint>
        <role-name>ROLE_USER</role-name>
    </auth-constraint>
    <web-resource-collection>
        <url-pattern>/app/*</url-pattern>
    </web-resource-collection>
</security-constraint>

这仅适用于我们的生产Websphere环境 现在我们不用Websphere测试,我们使用Jetty和JBoss。因此,我们有特定的Spring配置文件来处理这些环境的不同安全配置。但是Spring配置文件范围没有到达web.xml,我们仍然坚持使用这些安全约束指令,这些指令与我们的测试环境中的Spring Security冲突。

现在我们可以使用Maven配置文件来解决这个问题,如this question中所述,但这涉及到超过1个版本,我们希望避免这种情况。

总结一下,有没有办法不考虑Jetty的web.xml安全性? (如果你有JBoss 7的答案,那也很棒!)

编辑:使用短消息"No Realm"执行Jetty 6时出错为http 500。另一种解决方案可能是自动记录默认的虚拟用户,但我不知道这是否可行。

1 个答案:

答案 0 :(得分:1)

终于做到了这一点(Jetty 6):

我们在WEB-INF中添加了一个jetty-web.xml:

<?xml version="1.0"  encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
  <Set name="securityHandler">
      <New class="mypackage.util.JettySecurityHandler" />
  </Set>
</Configure>

重写的SecurityHandler:

package mypackage.util;

import org.mortbay.jetty.Request;
import org.mortbay.jetty.Response;
import org.mortbay.jetty.security.SecurityHandler;
import java.io.IOException;

public class JettySecurityHandler extends SecurityHandler {

    @Override
    public boolean checkSecurityConstraints(String pathInContext, Request request, Response response)
            throws IOException {
        return true;
    }
}

这不是很好,因为:
- 自定义代码
- 特定版本(不适用于Jetty 7和8)
但它确实有效。