java socket 权限管理_java.net.SocketException: 权限不够 (端口问题)

前言

最近系统换成了elementary os,因为是第一次使用linux,配置后出现了各种各样的问题,项目启动后一直报如下错误:

环境

linux

tomcat7.0.82

错误

严重: Failed to initialize end point associated with ProtocolHandler ["http-nio-443"]

java.net.SocketException: 权限不够

at sun.nio.ch.Net.bind0(Native Method)

at sun.nio.ch.Net.bind(Net.java:433)

at sun.nio.ch.Net.bind(Net.java:425)

at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)

at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)

at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:475)

at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:728)

at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:452)

at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11JsseProtocol.java:119)

at org.apache.catalina.connector.Connector.initInternal(Connector.java:978)

at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)

at org.apache.catalina.core.StandardService.initInternal(StandardService.java:560)

at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)

at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:840)

at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)

at org.apache.catalina.startup.Catalina.load(Catalina.java:643)

at org.apache.catalina.startup.Catalina.load(Catalina.java:668)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:253)

at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:427)

原因(tomcat中conf/server.xml)

protocol="org.apache.coyote.http11.Http11NioProtocol"

SSLEnabled="true"

secure="true"

URIEncoding="UTF-8"

useBodyEncodingForURI="true">

certificateKeystoreType="PKCS12"

certificateKeystorePassword="******"

certificateKeyAlias="1"/>

我在这里配置了https的443端口,但是linux中1024以下的端口默认是对 非root用户 禁用的

因为是开发环境所以我将server.xml中这块代码注释了,问题解决

当然服务器的话默认应该是root运行项目,所以没出现这个问题

其他

有时我们在服务Linux服务器上安装了tomcat(端口号为8080),而要求是输入网址后不添加端口号就能访问,这就意味着浏览器得通过80端口访问到你的tomcat(端口为8080),为此有两种解决方式:

基于linux系统禁止1024一下的端口让非root用户使用,那么就必须是用root用户登录才能去启动修改为80端口的tomcat(注意: 直接在tomcat server.xml中更改为80,用sudo命令是启动不了的,必须要root用户登录启动!!)

基于root密码不是随随便便能得到的,所以一般采用第二种方法(即端口映射)来达到你的目的:具体命令为:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

-t nat : 指出我要操作什么表.(不写就表示filter.默认是filter)

-A PREROUTING : A 添加的意思.表示我要在PREROUTING 中添加一个规则

--dport 80 : 如果请求80端口.

--to-port 8080 : 那么就转到8080端口.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值