如何在Java中找到使用端口的用户
我想将端口号映射到运行绑定到端口的进程的用户linux用户。 我如何用java实现它 我知道我可以使用shell并运行bash命令,将端口映射到PID,然后将PID映射到用户,但如果可以,我希望将其保留在java中 更一般的问题是:我有一个webapp应用程序,它接收来自localhost的请求,我想知道哪个本地用户执行了HttpServletRequest,所以我可以为它附加适当的权限 背景:如何在Java中找到使用端口的用户,java,web-applications,localhost,port,Java,Web Applications,Localhost,Port,我想将端口号映射到运行绑定到端口的进程的用户linux用户。 我如何用java实现它 我知道我可以使用shell并运行bash命令,将端口映射到PID,然后将PID映射到用户,但如果可以,我希望将其保留在java中 更一般的问题是:我有一个webapp应用程序,它接收来自localhost的请求,我想知道哪个本地用户执行了HttpServletRequest,所以我可以为它附加适当的权限 背景: 我正在为所有远程连接使用spring安全性。但是,我有一小部分应用程序与webapp分离,webap
我正在为所有远程连接使用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();
}
}
你能提供更多关于你上面代码的信息吗?它看起来很有趣,但它超出了我的理解力。请解释一下上面的代码