#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.