2014-12-15 2 views
0

Хотя есть очень похожий post, он не отвечает.Является ли Tyrus nessary для реализации проверки подлинности Java WebSocket?

Моя JavaFX приложение с WebSocket будет

  1. отправить идентификатор пользователя, пароль к серверу
  2. сохранить сессию, чтобы позволить пользователю сделать что-то вроде управления личными данными.

Учась

Oracle WebSocket, Tyrus 8,14 Клиент HTTP Authentication

У меня есть:

@ClientEndPoint 
public class loginEndPoint { 
    final ClientEndpointConfig cec = ClientEndpointConfig.Builder.create().build(); 

    public static void main(String [] args) { 
     AuthConfig authConfig = AuthConfig.Builder.create().disableBasicAuth().build(); 
     Credentials credentials = new Credentials("ws_user", "password"); 
     client.getProperties().put(ClientProperties.AUTH_CONFIG, authConfig); 
     client.getProperties().put(ClientProperties.CREDENTIALS, credentials); 

     client.connectToServer(new Endpoint() { 

      @Override 
      public void onOpen(Session session, EndpointConfig config) { 
       try { 
        session.addMessageHandler((MessageHandler.Whole<String>) (String message) -> { 
         System.out.println("Received message: "+message); 
         messageLatch.countDown(); 
        }); 
        //let user do some data management 
       } catch (IOException e) { 
        System.out.println("Connect Fail."); 
       } 
      } 
     }, cec, new URI("ws://localhost/myApp/login")); 
    } 
} 

Является ли это код правильно делать аутентификацию? И где я могу сделать проверку подлинности на стороне сервера на @ServerEndPoint?

@ServerEndpoint 
public class loginServerEndPoint { 
} 

Спасибо за помощь.

ответ

2

Нет, нет необходимости использовать Tyrus в качестве реализации сервера. На стороне сервера вы должны защитить WebSocket точно так же, как вы защищаете сервлет или jsp в контейнере сервлета, который может немного отличаться от контейнера к контейнеру (сопоставление пользователей с ролями). Посмотрите на authentication example Обратите внимание, что в этом примере показано, как выполнить аутентификацию запроса на использование WebSocket с помощью схемы аутентификации BASIC, но ваш код клиента отключает его явно, поэтому, вероятно, вы хотите использовать схему DIGEST.

+0

Мне очень жаль. Я действительно не понимаю. Почему пример относится к «web.xml»? Вы имеете в виду все, что мне нужно делать на стороне сервера, задавая web.xml? Я думал, что смысл аутентификации: сторона сервера проверит id и пароль, а затем сохранит что-то в переменной сеанса. Не понимаю ли я все это? – chiahao

+0

Извините, вы имеете в виду, что web.xml определяет, где находится программа аутентификации на стороне сервера? Не могли бы вы сказать мне, какой тег выполняет эту работу? Одинаково ли это и в tomcat? Как вы это понимаете, потому что я не вижу никакой подсказки в [Tyrus guide] (https://tyrus.java.net/documentation/1.9/user-guide.html). Спасибо за Ваш ответ. – chiahao

Смежные вопросы