Skip to content

abogatyrev/websocket-server

Repository files navigation

WebSocket Login Customer demo

Демонстрационное серверное приложение осуществляющее операцию аутентификацию пользователя.
Взаимодействие клиент/сервер происходит по протоколу WebSocket в определенном формате JSON.

Используются следующие инструменты и технологии:

Содержание

Подготовка среды демонстрации

  • установить Java SDK
  • установить Wildfly (тестирование и отладка производилась на Wildfly v8.2.1.Final)
  • установить сервер БД MySQL (дальнейшие настройки соединения с БД предполагают работу сервера локально на порту 3306, 'localhost:3306')
  • настроить переменную среды JAVA_HOME
  • в папке проекта 'websocket-server' скорректировать значения в файле настроек gradle.properties: секции "Wildlfly config" и "Luqibase config"

Установка проекта

  • запустить сервер WildFly:

для Linux: WILDFLY_HOME/bin/standalone.sh -c standalone.xml
для Windows: WILDFLY_HOME\bin\standalone.bat -c standalone.xml

  • в папке проекта 'websocket-server' выполнить скрипт конфигурации сервиса:

для Linux: WILDFLY_HOME/bin/jboss-cli.bat --connect --file=configure-server.cli
для Windows: WILDFLY_HOME\bin\jboss-cli.bat --connect --file=configure-server.cli

  • убедиться что сервер БД MySQL запущен
  • в папке проекта 'websocket-server' выполнить команду для настройки таблиц БД: gradlew update

Сборка и развертывание (build and deploy)

В папке проекта 'websocket-server' выполнить команду:

gradlew deployToWildfly

Зайти в браузере по адресу http://localhost:8080/websocket/ (предполагается, что сервер WildFly запущен с оспользованием web порта 8080)
Если все было выполнено правильно, должна открыться страница вида:

Проверка работоспособности

  • Успешный сценарий аутентификации пользователя (Для тестов в БД внесен пользователь: email: fpi@bk.ru, password: 123123)

При повторной аутентификации, сервис обновляет время действия существующего, валидного токена. Если токен не валидный (когда его время истекло), создается новый токен.

вводим email "fpi@bk.ru" и  password "123213", нажимаем кнопку "login"

  • Не успешный сценарий аудентификации пользователя

Можно использовать любые email и password, которых нет в БД

вводим email "123@gmail.com" и password "newPassword", нажимаем кнопку "login"

  • Сценарий обработки ошибок
останавливаем БД, нажимаем кнопку "login"

Выполнение Arquillian тестов

  • остановить сервер WildFly, сервер БД MySQL должен быть запущен
  • В папке проекта 'websocket-server' выполнить команду:
gradlew testWebsocket

Результаты тестов доступны в папке проекта 'websocket-server/build/reports/tests/index.html'

История токенов пользователей

Хранение истории изменений токенов пользователей происходит в БД, в таблице "ApiToken_AUD". Изменения сохраняются автоматически, с помощью Envers.

Database DDL

CREATE TABLE Customer (
  id bigint(20) NOT NULL AUTO_INCREMENT,
  email varchar(255) NOT NULL,
  password varchar(255) NOT NULL,
  PRIMARY KEY (id),
  UNIQUE INDEX customerEmailIDX (email)
)
ENGINE = INNODB
CHARACTER SET utf8
COLLATE utf8_general_ci;
CREATE TABLE ApiToken (
  id bigint(20) NOT NULL AUTO_INCREMENT,
  customerId bigint(20) NOT NULL,
  token varchar(255) NOT NULL,
  expiration datetime NOT NULL,
  PRIMARY KEY (id),
  UNIQUE INDEX apiTokenIDX (token),
  CONSTRAINT ApiTokenCustomerFK FOREIGN KEY (customerId)
  REFERENCES websocket_demo.customer (id) ON DELETE RESTRICT ON UPDATE RESTRICT
)
ENGINE = INNODB
CHARACTER SET utf8
COLLATE utf8_general_ci;
CREATE TABLE ApiToken_AUD (
  REV int(11) DEFAULT NULL,
  REVTYPE tinyint(4) DEFAULT NULL,
  id bigint(20) DEFAULT NULL,
  customerId bigint(20) DEFAULT NULL,
  token varchar(255) DEFAULT NULL,
  expiration datetime DEFAULT NULL
)
ENGINE = INNODB
CHARACTER SET utf8
COLLATE utf8_general_ci;
CREATE TABLE REVINFO (
  REV int(11) NOT NULL AUTO_INCREMENT,
  REVTSTMP bigint(20) DEFAULT NULL,
  PRIMARY KEY (REV)
)
ENGINE = INNODB
CHARACTER SET utf8
COLLATE utf8_general_ci;

Полезные материалы

http://www.mastertheboss.com/javaee/websockets/websockets-tutorial-on-wildfly-8?showall=&start=1
http://jlunaquiroga.blogspot.ru/2014/05/websockets-in-jee-7-with-wildfly.html
http://mgreau.com/posts/2013/11/11/javaee7-websocket-angularjs-wildfly.html
https://github.com/mgreau/javaee7-websocket
https://github.com/javaee-samples/javaee7-samples/tree/master/websocket

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published