Платформа
Good — это система управления правами доступа, разработанная на основе Spring Boot. Она представляет собой облегчённую систему для формирования собственной универсальной платформы разработки. Это позволяет сократить объём работы при последующих проектах и использовать платформу как основу для новых разработок.
В настоящее время система не полностью реализована, и разработчики планируют постепенно добавлять новые функции и в конечном итоге сделать проект открытым исходным кодом.
Адрес доступа:
Демонстрационный адрес:
Задачи для завершения:
- Добавить правила шифрования с использованием соли (отложить).
- Реализовать инициализацию административных прав при запуске проекта (отложить).
- Автоматически распределять права администратора после добавления меню ресурсов (отложить).
- Внедрить управление кешем с помощью Spring Cache и поддержку сторонних кешей (отложить).
Основные функции:
-
Права доступа: используется Shiro для гибкого контроля доступа к страницам и кнопкам, удовлетворяя большинство потребностей в управлении правами.
-
База данных: применяется Druid для управления соединениями с базой данных, что позволяет контролировать производительность базы данных и оптимизировать SQL-запросы. Также поддерживается мультиплатформенная конфигурация для динамического переключения между средами разработки, тестирования и производства.
-
Логирование: используется Logback для вывода логов. Мультиплатформенная настройка позволяет динамически переключаться между средами разработки, тестирования и производства, а также разделять логи по времени и размеру файла и архивировать их.
-
Планирование задач: Spring+Quartz используется для распределённых задач планирования на базе базы данных. Задачи могут быть вызваны через HTTP или выполнены локально. Поддерживается динамическое добавление, удаление, изменение и приостановка задач, а также возможность немедленного выполнения и просмотра истории выполнения без необходимости перезапуска системы.
-
Обработка исключений и проверка данных: встроенные механизмы обработки исключений и проверки данных.
Встроенные функции:
- Управление системой:
- Управление пользователями (завершено).
- Управление ролями (завершено).
- Управление правами (завершено).
- Организация (не завершено).
- Словарь (не завершено).
- Мониторинг SQL (завершено).
- Онлайн-управление пользователями.
- Планирование (завершено).
- Управление контентом (не завершено).
- Логирование (завершено).
Среда разработки:
- Intellij IDEA 2016.2
- JDK 1.8
- Maven 3.3.9
- Tomcat 8.5
- MySQL 5.7
- Navicat for MySQL
- Google Chrome
Выбор технологий:
Серверная часть:
- Ядро фреймворка: Spring Boot 1.5.4
- Фреймворк представления: Spring MVC 4.3.9
- Безопасность: Apache Shiro 1.3.2
- Планирование: Spring + Quartz 2.x
- Постоянное хранилище: Mybatis 3.4.4 + универсальный Mapper 3.4.2
- Проверка сервисов: Hibernate validator 5.3.5
- Инструмент генерации API: Swagger2
- Модульное тестирование: JUnit 4.12
- Клиент сети: Spring RestTemplate (OKGO) + OKHttp
- Почтовый клиент: Spring + JavaMail
- Шаблонизатор: Thymeleaf 3.0.0
- Пул соединений с базой данных: Alibaba Druid 1.1.0
- Кеширование: Spring Cache + Ehcache 2.5.3
- Логирование: SLF4J 1.7.22 + Logback 1.1.8
- Пагинация: PageHelper 5.0.3
- Инструменты: Apache Commons, Jackson 2.2, Lombok 1.16.14, Hutool 2.16.0, Feilong-core 1.10.5
Клиентская часть:
- UI-фреймворк: H-UI 3.0
- JS-фреймворк: jQuery 1.11.0
- Валидация форм: Jquery-validation 1.14.0
- Дерево: zTree v3
- Пагинация: laypage 1.3
- Всплывающие окна: layer 2.4
- Редактор форматированного текста: UEditor 1.4.3
- Загрузка файлов: WebUploader 0.1.5
- Выбор даты: My97DatePicker 4.8
- Графики: Echarts 3.4.0
- Улучшение форм: iCheck 0.7
Функциональная демонстрация:
Предоставлены ссылки на изображения, которые демонстрируют функциональность системы. Однако из-за ограничений формата ответа перевод этих изображений не представляется возможным.
Особые указания:
Автор предупреждает о возможных ошибках и недостатках в системе и предлагает сообщать о них для совместного улучшения.
QQ-группа для общения:
Предлагается присоединиться к группе для обсуждения и обмена опытом. Предоставлена ссылка на группу.
Благодарности:
Упоминается благодарность проекту Hutool за предоставленные инструменты и библиотеке Feilong за поддержку. Feilong-core — это набор инструментов для разработчиков на Java, который призван упростить работу с большим количеством повторяющегося кода.
Mapper и Mybatis_PageHelper — инструменты для работы с MyBatis, популярным фреймворком для взаимодействия с базами данных в Java. Mapper упрощает работу с однотабличными операциями (CRUD), а Mybatis_PageHelper предоставляет плагин для удобной работы с пагинацией.
renren-security — система управления доступом, предназначенная для обеспечения безопасности в приложениях.
H-ui.admin — шаблон для создания административных интерфейсов на основе H-ui, библиотеки компонентов пользовательского интерфейса.
Обновление журнала
Плановые обновления
-
Сеансовое управление:
- управление сеансами онлайн-пользователей и доступ к их базовой информации; возможность принудительного выхода.
-
Управление словарями.
24 сентября 2017 года
- Решена проблема, когда при использовании CronTrigger в качестве триггера Quartz выполнение задачи происходит сразу после вызова метода scheduler.rescheduleJob().
- Решена проблема с отсутствием обновления журнала выполнения при изменении выражения Cron.
7 сентября 2017 года
- Разрешена проблема автоматического внедрения Spring-контейнера в аннотированные bean-компоненты в рамках задач Quartz.
20 августа 2017 года
- Права доступа представлены в виде древовидной таблицы для улучшения пользовательского опыта.
14 августа 2017 года
- Исправлена ошибка, из-за которой при выборе списка в процессе авторизации нельзя было выбрать только список.
- При отмене всех дочерних узлов в zTree родительский узел не отменялся.
12 августа 2017 года
- Переработан дизайн страницы входа, активирован режим «гламур».
- Исправлен баг, связанный с автоматическим удалением пробелов в начале и конце строк.
9 августа 2017 года
- Проверка файлов на соответствие требованиям безопасности:
- проверка расширения файла на допустимые значения;
- проверка целостности файла по его заголовку для предотвращения несанкционированного доступа путём изменения расширения.
5 августа 2017 года
- Определён список приветственных страниц.
- Размещён внешний демонстрационный адрес: http://139.224.112.51:8082/admin/index.
- Имя пользователя: test.
- Пароль: test.
- Настроен Nginx для доступа к изображениям (см. файл конфигурации в группе).
- После изменения текущего пароля при выходе из системы информация о предыдущих сеансах остаётся доступной, что приводит к повторному запросу на вход.
- Решение:
- использование настраиваемого фильтра выхода;
- дополнительная настройка выхода в бэкэнде (не реализовано).
1 августа 2017 года
- Структура пакета переработана и организована по модулям.
- Если пользователь уже вошёл в систему, перенаправление на страницу входа при попытке повторного входа.
31 июля 2017 года
- Интеграция Feilong-Core версии 1.10.5.
- Ограничение количества одновременных входов для одного аккаунта до одного, с возможностью блокировки предыдущего сеанса:
- Ajax-запросы: предоставление выбора для повторного входа и последующего выхода с перенаправлением на страницу входа;
- Традиционные запросы: после блокировки предыдущего сеанса происходит перенаправление на страницу входа с уведомлением о блокировке.
- Добавлены фильтры входа и выхода для проверки наличия активных сеансов и предоставления соответствующих уведомлений, включая информацию об IP-адресе и времени последнего входа.
- Реализован настраиваемый фильтр выхода для очистки кэша.
20 июля 2017 года
- Исправление ошибок.
- Переработка роли и разделение прав доступа.
- Замена редактора форматированного текста на UEditor (в процессе). Удаление избыточных зависимостей из H-ui.
- Обновление Spring Boot до версии 1.5.4.
- Обновление MyBatis до версии 3.4.4, mapper-spring-boot-starter до версии 1.3.0, pagehelper-spring-boot-starter до версии 1.1.2.
- Обновление druid-spring-boot-starter до версии 1.1.2 (примечание: версия 1.1.1 не поддерживает конфигурацию ConfigFilter для шифрования паролей).
- Повторное конфигурирование и реализация функции загрузки файлов.
18 июля 2017 года
- Решение проблемы с немедленным вступлением в силу изменений ролей при назначении новых прав доступа, в настоящее время реализовано только для текущего пользователя. Для других пользователей изменения не вступают в силу немедленно (остаточная проблема).
- Удаление параметра JSESSIONID из адресной строки браузера.
14 июля 2017 года
- Устранена проблема невозможности привязки объектов при использовании универсальных мапперов с resultType.
- Исключена фильтрация двоичных файлов, устранена проблема с отображением шрифтов и иконок.
28 июня 2017 года
- Добавлен пример загрузки файлов и содержимого jar-пакетов при использовании SpringBoot для создания jar-файлов.
27 июня 2017 года
- Добавление druid-spring-boot-starter.
- Шифрование паролей базы данных.
- Детальная настройка Druid.
27 мая 2017 года
- Разделение исключений на категории:
- Сервисный уровень генерирует определённые типы RuntimeException.
- Контроллерный уровень генерирует исключения с кодом состояния.
- Все исключения унифицируются и передаются клиенту.
- Повторная реализация проверки формы (включая проверку дублирования отправки и статуса токена после повторной отправки). Все исключения обрабатываются единообразно и передаются клиенту.
- Планируется отображение результатов проверки данных на стороне клиента (в разработке).
26 мая 2017 года
- Унификация обработки исключений и их классификация.
- Реализация проверки данных на сервере, поддержка группировки, сортировки, двухуровневой проверки (передней и задней) для обеспечения безопасности данных.
25 мая 2017 года
- Создание плагина для унифицированных сообщений об ошибках.
- AJAX добавляет слой маскировки.
- Улучшение пользовательского опыта.
24 мая 2017 года
- Настройка заголовков ответов для AJAX-операций, таких как отсутствие прав доступа, тайм-аут входа и повторная отправка форм, для единообразного отображения на клиентской стороне.
23 мая 2017 года
- Внедрение механизма предотвращения повторной отправки форм с использованием JavaScript и токенов на серверной части.
- Для запросов AJAX, если проверка не пройдена (например, имя пользователя уже занято), после повторной отправки будет возвращён заголовок X-Refresh-Token-Form, который обновляет значение tokenForm во всех формах.
- Из-за того, что сессии хранятся в памяти сервера, в кластерной среде невозможно гарантировать, что токен, созданный одним сервером, будет проверен другим сервером. Необходимо найти способ обмена данными между серверами.
- Решение: использование Spring Session для совместного использования сессий или сохранение токенов в Redis.
- В случае открытия нескольких окон для одной и той же функции (например, добавление пользователя) необходимо ограничить действия.
- Предлагается использовать последнее открытое окно в качестве основного и предоставлять дружественные уведомления о завершении срока действия окна при повторном открытии.
- С точки зрения безопасности можно установить срок действия для formToken. Например, можно использовать Redis для управления сроком действия или добавить временную метку в formToken для сравнения.
- Передняя часть может глобально отключить кнопку отправки формы перед отправкой запроса AJAX, чтобы уменьшить нагрузку на сервер и автоматически активировать её после успешного ответа.
Комментарии ( 0 )