如何在Java中找到使用端口的用户

如何在Java中找到使用端口的用户,java,web-applications,localhost,port,Java,Web Applications,Localhost,Port,我想将端口号映射到运行绑定到端口的进程的用户linux用户。 我如何用java实现它 我知道我可以使用shell并运行bash命令,将端口映射到PID,然后将PID映射到用户,但如果可以,我希望将其保留在java中 更一般的问题是:我有一个webapp应用程序,它接收来自localhost的请求,我想知道哪个本地用户执行了HttpServletRequest,所以我可以为它附加适当的权限 背景: 我正在为所有远程连接使用spring安全性。但是,我有一小部分应用程序与webapp分离,webap

我想将端口号映射到运行绑定到端口的进程的用户linux用户。 我如何用java实现它

我知道我可以使用shell并运行bash命令,将端口映射到PID,然后将PID映射到用户,但如果可以,我希望将其保留在java中

更一般的问题是:我有一个webapp应用程序,它接收来自localhost的请求,我想知道哪个本地用户执行了HttpServletRequest,所以我可以为它附加适当的权限

背景:
我正在为所有远程连接使用spring安全性。但是,我有一小部分应用程序与webapp分离,webapp与应用程序服务器一起在本地运行,该应用程序使用linux用户机制进行身份验证。因此,我绕过了localhost的服务器身份验证规则,假设允许所有localhost访问。问题在于授权-我需要识别运行localhost请求的用户。知道如何实现这一点吗?

这是依赖Linux的代码,但移植到Windows并不困难

这不是Servlet代码,但在这种情况下也可以使用:

假设我有一个服务器套接字正在等待接受呼叫。当它收到客户端请求时,它会在另一个端口创建一个套接字来处理该“远程”请求

ServerSocket ss = new ServerSocket(2000);
System.out.println("Listening on local port : " + ss.getLocalPort());

while(...)
{
 Socket s = ss.accept();
 System.out.println("accepted client request, opened local port : " + s.getPort());
 ...
}
因此,您需要将上述代码段中的s.getPort输出提供给以下程序的main方法

public class FindUserByPort
{
  public static void main(String[] args) throws Exception
  {
    String cmd = "netstat -anp | grep ";
    int port = Integer.valueOf(args[0]);
    cmd = cmd + port ;

    Process pr = Runtime.getRuntime().exec(cmd);
    InputStream is = pr.getInputStream();

    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String line = null;
    List<Integer> pIDs = new ArrayList<Integer>();

    while ((line = br.readLine()) != null)
    {
      if (line.contains("127.0.0.1:" + port))
      {
        String pidPname = line.substring(line.indexOf("ESTABLISHED") + "ESTABLISHED".length());
        pidPname = pidPname.trim();
        String pid = pidPname.split("/")[0];
        pIDs.add(Integer.valueOf(pid));
      }
    }
    if (pIDs.size() > 0)
    {
      for (int pid : pIDs)
      {
        String command = "top -n1 -b -p " + pid ;
        Process p = Runtime.getRuntime().exec(command);
        InputStream _is = p.getInputStream();

        BufferedReader _br = new BufferedReader(new InputStreamReader(_is));
        String _line = null;
        while ((_line = _br.readLine()) != null)
        {
          _line = _line.trim();
          if(_line.startsWith(String.valueOf(pid)))
          {
            String[] values = _line.split(" ");
            System.out.println("pid : " + pid + ", user : " + values[1]);
          }
        }
        _is.close();
        _br.close();
      }
    }
    is.close();
    br.close();
  }
}

你能提供更多关于你上面代码的信息吗?它看起来很有趣,但它超出了我的理解力。请解释一下上面的代码