Могу ли я использовать какой-либо механизм аутентификации на сетевом сервере, реализованный с помощью Java Socket?

#java #sockets #authentication

#java #сокеты #аутентификация

Вопрос:

Я реализовал сетевой сервер с Java ServerSocket и Socket. Нет проблем с получением / отправкой http-запросов / ответов из / в веб-браузеры. Однако я хочу добавить возможность аутентификации на сервер. Я заметил, что есть такой класс java.net.Authenticator или java.net.PasswordAuthentication, но я понятия не имею, могу ли я применить их к серверу.

Если кто-либо из вас использовал com.sun.httpserver.HTTPServer, его аутентификация легко поддерживается com.sun.httpserver.Аутентификатор, который может быть установлен с помощью метода HttpContext.setAuthenticator(). К сожалению, использование com.* package может быть запрещено в нашем проекте. Я просто хочу знать, есть ли какой-либо класс в стандартных пакетах java, который может позволить мне делать то же самое, что и com.sun.httpserver.Аутентификатор?

Я также могу реализовать это, заставив клиента указывать пользователя и пароль в http-запросах и анализировать их на сервере. Но если есть какой-либо удобный способ, я был бы очень благодарен.

Спасибо.

Комментарии:

1. Какой тип аутентификации вы хотите? HTTP Basic? HTTP-форма? NTLM?

2. В настоящее время я думаю, что базовой аутентификации HTTP достаточно.

Ответ №1:

Я думаю, вы путаете сетевые уровни.

com.sun.httpserver.HttpServer реализует протокол HTTP и работает на прикладном уровне. HTTP определяет механизм аутентификации, таким com.sun.httpserver.Authenticator образом, является реализацией механизма аутентификации, определенного в стандарте HTTP.

java.net.ServerSocket и сокет работает на транспортном уровне и реализует протокол TCP. TCP не определяет службу аутентификации.

Когда ваше взаимодействие клиент-сервер использует HTTP, вам следует искать реализацию HTTP-сервера. IMHO не является хорошей идеей переопределить HTTP-сервер на основе java.net .* пакет.

К сожалению, Java SE не содержит HTTP server -com.sun.httpserver не является частью стандарта-, но существует множество реализаций с открытым исходным кодом и переносимых. Два широко используемых — это Tomcat и Jetty.