我正在尝试跟随progam:
- 如果我使用sudo java奔跑是可以的,但是我不想使用sudo
- 没有sudo,我会有以下错误:
SocketException: Permission Denied (as its PORT 80)
使用码头文档,我可以使用命令行进行工作
-
jetty-setuid.xm
l- put用户名是非root用户 -
start.ini
-更改为exec和通过etc/jetty-setuid.xml
作为第一个参数 -
jetty.xml
-将端口号作为80
然后我仍然是sudo作为非root用户 - 喜欢 -> sudo java -jar start.jar
码头从端口80开始,当时是非根用户。
我想使用Java程序实现相同的操作。感谢任何帮助/评论。
package my.package;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.nio.SelectChannelConnector;
public class JettyTest {
public static void main(String[] args) throws Exception
{
Server server = new Server();
System.out.println("Created new server, now going to start");
SelectChannelConnector connector0 = new SelectChannelConnector();
connector0.setPort(80); //on port 80
connector0.setMaxIdleTime(30000);
connector0.setRequestHeaderSize(8192);
server.setConnectors(new Connector[]{ connector0 });
server.setHandler(new MyHandler()); //simple hello world handler
server.start();
System.out.println("started server on port 80");
server.join();
}
}
您必须以某种方式使用unix上的sudo来提升到根特权。否则您将无法获得端口80。
对于Java程序,必须将sudo应用于java命令本身,但是这样做通常是一个坏主意。
一个更保守的解决方案是绑定到另一个端口,例如8080,然后将端口80绑定到该端口。这样做的命令在操作系统之间差异很大,甚至可能在某些较旧的Unix versions上存在。
sudo将命令的特权提升到根级别。您之所
换句话说 - 如果您不是root的话,您将无法在端口80上运行Jetty(或任何其他服务)。
这里最简单的解决方案是在另一个端口上运行码头(8080是一个常见的码头)。
如果您仍然希望用户在默认端口上访问服务,请咨询http://wiki.eclipse.org/jetty/howto/port80和http://docs.codes.codehaus.org/display/jetplay/jetty/port80。