我可以在使用Java Socket实现的网络服务器上使用任何身份验证机制吗?

时间:2011-05-18 09:51:13

标签: java sockets authentication

我用Java ServerSocket和Socket实现了一个网络服务器。从Web浏览器获取/发送http请求/响应没有问题。但是,我想为服务器添加身份验证功能。我注意到有类java.net.Authenticator或java.net.PasswordAuthentication,但我不知道我是否可以将它们应用到服务器上。

如果您有任何人使用过com.sun.httpserver.HttpServer,com.sun.httpserver.Authenticator可以轻松支持其身份验证,可以通过HttpContext.setAuthenticator()方法设置。不幸的是,在我们的项目中可能不允许使用com。*包。我只是想知道java标准包中是否有任何类可以让我做与com.sun.httpserver.Authenticator相同的事情?

我也可以通过强制客户端在http请求中提供用户和密码来实现它,并在服务器中解析它们。但如果有方便的话,我会非常感激。

感谢。

1 个答案:

答案 0 :(得分:0)

我想,你混淆了network layers

com.sun.httpserver.HttpServer实现HTTP协议并在应用程序层中工作。 HTTP定义authentication mechanism,因此com.sun.httpserver.Authenticator是HTTP标准中定义的身份验证机制的实现。

java.net.ServerSocket和Socket在传输层中工作并实现TCP协议。 TCP未定义身份验证服务。

当您的客户端 - 服务器通信使用HTTP时,您应该寻找HTTP服务器实现。恕我直言,重新实现基于java.net。*包的HTTP服务器不是一个好主意。

不幸的是,Java SE不包含HTTP服务器-com.sun.httpserver不是标准的一部分,但是有许多开源和可移植的实现。广泛使用的两个是TomcatJetty