
Отчет по лабораторной работе «Система учета прохода в здание»
Работу выполнил студент группы № 6081/1 Губанов Е.А.
Работу принял преподаватель Стручков Игорь Вячеславович
Задание
Разработка программы “Система учета прохода в здание” в среде NetBeans, которая включает в себя операции: проверка допуска в здание, запрос количества людей в здании, присутствие конкретного человека и ведение журнала посещений. Сериализуемый объект – смарт-карта (имя, номер). В дополнительную часть задания входило создание web-услуги, позволяющей полное клиентское взаимодействие, с помощью обмена данными JSON формата.
Описание программы
В ходе работы была реализована программа “Система учета прохода в здание”, визуальная часть программы представляет собой jsp-страницу, которая содержит в себе html-разметку и java-код, позволяющий использовать операции удаленного объекта. Приложение написано таким образом, что все действия и результаты выводятся на главной странице, это реализовано с помощью javascript и библиотеки jQuery. Так же с помощью web-cервиса, можно подсоединить любое количество клиентов, которые могут взаимодействовать с сервисом одновременно. Данные сервис был реализован с использованием JSON сообщений.
UML-диаграмма
Web-сервис
Для создания дополнительного модуля взаимодействия клиента с сервером, была изменена аннотация Stateless на Stateful. Это было сделано для того, чтобы можно было хранить сеансовое состояние. С помощью него мы можем отслеживать подключившихся пользователей.
Взаимодействие с клиентом происходит в два этапа:
Клиент обращается к сервису, используя GET/POST запрос, и передаёт свою пару логин/пароль. В случае аутентификации, сервер отдаёт токен (ключ), для дальнейшего взаимодейстия и обмена данными. При неправильной паре логин/пароль сервер выдаёт ошибку.
Последующий обмен происходит с помощью полученного ключа.
Для общения с сервером была создана специальная страничка connect.jsp. Через которую и проходят все обращения к серверу.
Протокол взаимодействия с сервером.
Запрос |
Ответ в формате JSON |
Для аутентификации и получения токена, обращение к серверу происходит по адресу: http://localhost:8080/AccessInBuilding-war/connect.jsp?auth_login=client& auth_pwd=pwd_client . В адресе указываются логин и пароль клиента. |
{“ token”: “token_key”} – при корректной аутентификации {“error”: ”202”} – ошибка, пара логин/пароль не корректны |
Количество людей в здании: http://localhost:8080/AccessInBuilding-war/connect.jsp?token= token_key&type=act |
{“cnt”: “n”} – количество людей, например, {“cnt”: “3”} {“error”: “303”} – ошибка, сервер не отвечает |
Проверка наличия пользователей в здании: http://localhost:8080/AccessInBuilding-war/connect.jsp?token= token_key&type=users |
{“users”: “data”} – возвращается таблица пользователей в здании - data. {“error”: “404”} – ошибка, сервер не отвечает |
Лог посещений здания: http://localhost:8080/AccessInBuilding-war/connect.jsp?token= token_key&type=logs |
{“ logs”: “data”} – возвращается таблица логов посежений всех пользователей - data. {“error”: “505”} – ошибка, сервер не отвечает |
Добавить пользователя в БД: http://localhost:8080/AccessInBuilding-war/connect.jsp?token= token_key&type=add&name=name&code=code В дополнительных параметрах name и code мы указываем имя и код сотрудника соответственно. |
{“ data”: “done”} – возвращается done при успешном занесении в базу. {“error”: “101”} – ошибка, сервер не отвечает |
Проверка допуска в здание по имени/коду: http://localhost:8080/AccessInBuilding-war/connect.jsp?token= token_key&type=add&name=name&code=code В дополнительных параметрах name и code мы указываем имя и код сотрудника соответственно. |
{“ data”: “user_id”} – при нахождении пользователя в базе, возвращается его user_id (идентификатор пользователя). {“error”: “101”} – ошибка, сервер не отвечает. |
Изменение статуса положения пользователя (в здании/нет в здании): http://localhost:8080/AccessInBuilding-war/connect.jsp?token= token_key&type=update_act&id=user_id&act=act В дополнительных параметрах user_id и act мы указываем идентификатор пользователя и новый статус сотрудника соответственно. |
{“ data”: “done”} – возвращается done при успешном изменении статуса. {“error”: “101”} – ошибка, сервер не отвечает |
С помощью данного протокола любой клиент, написанный на любом языке программирования, может настроить полное взаимодействие с сервисом.
Серверная часть, разработанная на PHP.
Визуальная часть выполнена на сто процентов совпадающая с визуальным выводом сервера. Тут даже используюстя стили, javascript и библиотеки, взятые на прямую с сервера. Только javascript js.js, управляющий выводом сервисов не экран, был настроен для взаимодействия с сервером (через файл connect.php). Для этого был создан класс ConnectLogin(). Который конектится к серверу, аутентифицируется, сохраняет сессионные куки от сервера и сохраняет токен переданный от сервера в своих куках. После чего, по средствам токена (ключа), происходит динамическое обращение к серверу.
Данный класс содержит в себе 4-е метода:
ConnectLogin() - Автоматическое соединение с сервером и получение токена. Если токен получен, то будет исполь он, если нет, то по средствам функции curl производиться соединение и обмен с сервером. Это происходит при объявлении класса.
Autorization() – метод для авторизации с сервером. Вызывается в ConnectLogin().
getData($type="act", $opt=array()) – метод для обмена информации с сервером по средствам curl.
disconect() – деструктор класса. Удаляет токен.
Вывод на экран полученных данных происходит динамически по средствам технологии AJAX и использованием бибилиотеки jQuery.
Инструкция для пользователя
Добавить пользователя в систему:
Кнопка “Добавить нового пользователя”, выводит на экран форму. В появившейся форме вводим «Имя Пользователя» (обязательный параметр) и «Код» (не обязательный параметр), нажимаем кнопку “Добавить пользователя”. Если операция прошла успешно, то появляется сообщение “Пользователь добавлен” и изменяется цвет формы, если произошла ошибка, то выводится сообщение об ошибке.
Проверка допуска в здание по имени/коду:
В строке поиска можно ввести «Имя Пользователя» или его «Код» и нажать кнопку “Найти”. Результат поиска появляется под строкой поиска.
Количество людей в здании:
Выводится автоматически при загрузке приложения, находится под строкой поиска.
Проверка наличия пользователей в здании:
Выводится автоматически при загрузке приложения, находится под строкой количества людей в здании.
Лог посещений здания:
Кнопка “Лог посещаемости”: при нажатии разворачивает лог посещений здания (дата, имя и примечание).