最近又碰到一个蛋疼的问题,项目中使用maven-jetty-plugin启动嵌入的jetty作为app server,设置了监听端口号为8080,启动也没有问题,可以看到成功提示:
使用netstat查看端口占用情况
我本机使用127.0.0.0::8080/xxxx 和 localhost:8080/xxxx 以及使用本机的ip地址10.101.211.37:8080/xxxx 访问都没有问题。
但是用局域网内同事的机器访问都打不开链接(但都能ping的通我的机器)。随后使用 xshell5 进行telnet测试,果然,我本地的机器可以连通,
可是同事的机器依旧不行。于是就想到了防火墙,将其整个关掉之后,别人就能访问了。但是这样做很不安全,常见的做法是在防火墙的入站规则中添加一条开放8080端口规则项(具体步骤略)。
当我认为问题就这样轻松解决的时候,同事告诉我说还是访问不到。网上又搜了搜防火墙的配置,发现配置没有问题。What the hell?
之后的一天,我突然想起来,自己在windows安装软件的时候,喜欢在它提示是否允许访问网络的时候,总是勾选private类型的网络,不允许在public公用,所以快速的看了一下网络配置.
果然,我所在的网络组是public的。问题一下子,就豁然开朗。
由于我们在项目中用的是maven的jetty插件,启动项目的时候,会单独调用java.exe去启动一个jvm(但是不知道我为什么我看到的是javaw.exe,先不管,以后搞明白)。
因此,就需要设置java自身的访问权限。
这里有两种解决方案:
1、第一种方式是最简单也是最省事儿的,找到并修改入站规则中所有和java平台相关的public域TCP类型的规则项,
右键属性,找到“通用”(我这里是General)tab页,将其Action选项设置为“Allow the connection“。
2、第二种就比较安全一点儿,同样需要设置第一种方式中的选项,允许连接。
但是,保存之前,还得修改一个地方:
只对外开放8080端口。
这样即使是,你把之前配置的关于8080端口的入站规则删除掉,你的web服务仍然可以在外部访问。