【发布时间】:2010-12-29 15:40:28
【问题描述】:
我如何确保jetty 只允许来自本地主机的连接?这意味着从系统 B 上的 客户端 B 到系统 A 上的服务器 A 的连接 必须失败。我知道我可以通过配置我的防火墙来做到这一点(所以请不要回答这个问题)。我只想让 Jetty 只监听 localhost(loopback)。
【问题讨论】:
我如何确保jetty 只允许来自本地主机的连接?这意味着从系统 B 上的 客户端 B 到系统 A 上的服务器 A 的连接 必须失败。我知道我可以通过配置我的防火墙来做到这一点(所以请不要回答这个问题)。我只想让 Jetty 只监听 localhost(loopback)。
【问题讨论】:
经过一点点googling,我自己找到了我的问题的答案。
答案是(在 jetty-distribution-7.0.1.v20091125 上测试):
<Call name="addConnector">
<Set name="port"><SystemProperty name="jetty.port"/></Set> 行之前设置<Set name="Host"><SystemProperty name="jetty.host" default="127.0.0.1"/></Set>
java -jar start.jar)。服务器应输出如下内容:2009-12-23 23:02:09.291:INFO::Started SelectChannelConnector@127.0.0.1:8080
重要的是它应该说 127.0.0.1 而不是 0.0.0.0,0.0.0.0 意味着监听机器上的所有 ips。
P.S:我想保护apache solr(即 使用码头)可以实现 同样的方式。
您还可以通过以下方式以编程方式(嵌入码头)绑定到 localhost:
Server server = new Server();
Connector connector = new SelectChannelConnector();
connector.setHost("localhost");
connector.setPort(80);
server.addConnector(connector);
【讨论】:
<Call name="addConnector"> 怎么办。有没有更全面的例子?
对于嵌入式 Jetty 9,此代码有效。
Server server = new Server();
ServerConnector connector=new ServerConnector(server);
connector.setPort(80);
connector.setHost("localhost");
server.setConnectors(new Connector[]{connector});
【讨论】:
new Server(InetSocketAddress.createUnresolved("127.0.0.1", port))
我没有尝试过,但通常的方法是将服务器绑定到本地主机(即到 IP 127.0.0.1)。这意味着 Jetty 服务器将只侦听以 localhost 作为其目标地址的连接。
快速谷歌搜索发现了这个http://old.nabble.com/How-to-make-Jetty-bind-to-specific-IP-address---to11667378.html#a11669524:
将此条目添加到 SelectChannelConnector 例如:
<Set name="Host">127.0.0.1</Set>
【讨论】:
您可以在虚拟机启动时设置jetty.host属性:
java -Djetty.host=127.0.0.1 -jar start.jar
顺便说一句,jetty.port 也一样。
【讨论】:
我可以使用 .htaccess 做到这一点,但由于某种原因,本地主机过滤不起作用。如果您想允许来自特定外部 IP 的流量并阻止所有其他 IP 尝试
http://technologyenablingbusiness.blogspot.com/2011/03/setting-security-in-solr-running-on.html
【讨论】:
对于嵌入式 Jetty 9,像这样初始化 Jetty 服务器:
Server server = new Server(new InetSocketAddress("127.0.0.1", 8080));
记得import java.net.InetSocketAddress;。
参考:org.eclipse.jetty.server.Server 的构造函数。 `
【讨论】: