轉載自:http://wangchongan.com/articles/java-net-socket-exception-permission-denied.html
html
今天在Linux下用Jetty把一個應用啓動起來報權限不夠異常。其實緣由很簡單,可是若是一時疏忽可能會習慣性地google一把,我就google了一把,可是發現網上關於這個問題的內容不多。因此我特記錄一下,但願能給遇到一樣問題的同窗有幫助。java
異常內容以下:linux
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 SelectChannelConnector@0.0.0.0:80: java.net.SocketException: 權限不夠
2012-09-13 20:37:18.078:INFO::Started Ajp13SocketConnector@0.0.0.0: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 Server@4950b45a: 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)web
【推薦解決辦法】ubuntu
緣由實際上是由於在linux下,若是使用1024如下的端口則須要root權限,因此由於我當前使用的不是root權限,因此權限不足而沒法使用80端口,因此會報權限不夠異常。把Jetty的HTTP端口改成非80端口且大於1024的端口,好比8080便可。eclipse
在pom.xml中修改端口號。socket
【其餘解決方案】tcp
若是就是要使用80端口訪問應用,那麼還有辦法嗎?答案是確定的,咱們可使用iptables命令解決。google
咱們能夠經過如下命令設置將80端口轉發到8080端口,這樣eclipse中的jetty插件仍是能夠綁定在8080端口,/etc/hosts綁定本地到平常的域名也能夠經過80端口自動轉發,這樣就很方便了。spa
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
上述設置是臨時的,若是重啓後該設置就會失效,若是想讓你的配置在重啓後仍然有效,能夠參考這裏。