Linux下報 java.net.SocketException許可權不夠 異常解決

來源:互聯網
上載者:User

標籤:

 轉載自:http://wangchongan.com/articles/java-net-socket-exception-permission-denied.html

 

今天在Linux下用Jetty把一個應用啟動起來報許可權不夠異常。其實原因很簡單,但是如果一時疏忽可能會習慣性地google一把,我就google了一把,但是發現網上關於這個問題的內容很少。所以我特記錄一下,希望能給遇到同樣問題的同學有協助。

 

異常內容如下:

HSFJettyWebAppContext replace servlet context get file /tmp/hsf_jetty_placeholder/WEB-INF/common/webx-component-and-root.xml
Web Context替換檔案到【/tmp/hsf_jetty_placeholder/WEB-INF/common/webx-component.xml】
2012-09-13 20:37:17.930:INFO:/:WebxComponents: initialization completed
2012-09-13 20:37:17.975:INFO:/:Initializing filter: mdc
2012-09-13 20:37:17.976:INFO:/:SetLoggingContextFilter – mdc: initialization completed
2012-09-13 20:37:17.976:INFO:/:Initializing filter: webx
2012-09-13 20:37:17.980:INFO:/:WebxFrameworkFilter – webx: initialization completed
2012-09-13 20:37:18.077:WARN::failed [email protected]:80: java.net.SocketException: 許可權不夠
2012-09-13 20:37:18.078:INFO::Started [email protected]:8009
2012-09-13 20:37:18.079:INFO::AJP13 is not a secure protocol. Please protect port 8009
2012-09-13 20:37:18.079:WARN::failed [email protected]: java.net.SocketException: 許可權不夠
java.net.SocketException: 許可權不夠
    at sun.nio.ch.Net.bind(Native Method)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:126)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:59)
at org.mortbay.jetty.nio.SelectChannelConnector.open(SelectChannelConnector.java:216)
at org.mortbay.jetty.nio.SelectChannelConnector.doStart(SelectChannelConnector.java:315)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.Server.doStart(Server.java:235)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at runjettyrun.Bootstrap.main(Bootstrap.java:259)

 

【推薦解決辦法】

原因其實是因為在linux下,如果使用1024以下的連接埠則需要root許可權,所以因為我當前使用的不是root許可權,所以許可權不足而無法使用80連接埠,所以會報許可權不夠異常。把Jetty的HTTP連接埠改為非80連接埠且大於1024的連接埠,比如8080即可。

 在pom.xml中修改連接埠號碼。

【其他解決方案】

如果就是要使用80連接埠訪問應用,那麼還有辦法嗎?答案是肯定的,我們可以使用iptables命令解決。

我們可以通過以下命令設定將80連接埠轉寄到8080連接埠,這樣eclipse中的jetty外掛程式還是可以綁定在8080連接埠,/etc/hosts綁定本地到日常的網域名稱也可以通過80連接埠自動轉寄,這樣就很方便了。

tables -t nat -A PREROUTING -p tcp –dport 80 -j REDIRECT –to-ports 8080
iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 –dport 80 -j REDIRECT –to-ports 8080

 

不需要時可以清除掉:

iptables -t nat -F PREROUTING
iptables -t nat -F OUTPUT

 

上述設定是臨時的,如果重啟後該設定就會失效,如果想讓你的配置在重啟後仍然有效,可以參考這裡。

Linux下報 java.net.SocketException許可權不夠 異常解決

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.