當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服務仍然可以在外部訪問。

發佈了31 篇原創文章 · 獲贊 13 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章