当java碰到防火墙

最近又碰到一个蛋疼的问题,项目中使用maven-jetty-plugin启动嵌入的jetty作为app server,设置了监听端口号为8080,启动也没有问题,可以看到成功提示:

server start

使用netstat查看端口占用情况

listening

我本机使用127.0.0.0::8080/xxxx 和 localhost:8080/xxxx 以及使用本机的ip地址10.101.211.37:8080/xxxx 访问都没有问题。
但是用局域网内同事的机器访问都打不开链接(但都能ping的通我的机器)。随后使用 xshell5 进行telnet测试,果然,我本地的机器可以连通,

telnet

可是同事的机器依旧不行。于是就想到了防火墙,将其整个关掉之后,别人就能访问了。但是这样做很不安全,常见的做法是在防火墙的入站规则中添加一条开放8080端口规则项(具体步骤略)。

new in bound rule

当我认为问题就这样轻松解决的时候,同事告诉我说还是访问不到。网上又搜了搜防火墙的配置,发现配置没有问题。What the hell?
之后的一天,我突然想起来,自己在windows安装软件的时候,喜欢在它提示是否允许访问网络的时候,总是勾选private类型的网络,不允许在public公用,所以快速的看了一下网络配置.

net config

果然,我所在的网络组是public的。问题一下子,就豁然开朗。

由于我们在项目中用的是maven的jetty插件,启动项目的时候,会单独调用java.exe去启动一个jvm(但是不知道我为什么我看到的是javaw.exe,先不管,以后搞明白)。

javaw任务

因此,就需要设置java自身的访问权限。
这里有两种解决方案:
1、第一种方式是最简单也是最省事儿的,找到并修改入站规则中所有和java平台相关的public域TCP类型的规则项,

jre rules

右键属性,找到“通用”(我这里是General)tab页,将其Action选项设置为“Allow the connection“。

action

2、第二种就比较安全一点儿,同样需要设置第一种方式中的选项,允许连接。
但是,保存之前,还得修改一个地方:

port

只对外开放8080端口。

这样即使是,你把之前配置的关于8080端口的入站规则删除掉,你的web服务仍然可以在外部访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值