1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/burningmyself-ysf

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

YSF V5.0

Введение

YSF основан на SpringBoot и направлен на создание более лаконичного бэкенда для управления системой. Он идеально интегрирует Spring MVC, Shiro, Mybatis-Plus и Beetl! Код проекта YSF лаконичен, комментарии обширны, а простота использования делает его привлекательным выбором. YSF также включает в себя множество базовых модулей (управление пользователями, управление ролями, управление отделами, управление словарями и т. д.), которые могут служить основой для системы бэкенд-управления. Цели на 2018 год — сделать систему ещё более лаконичной и стандартизированной.

В версии YSF v3.0 были добавлены REST API-сервисы, обеспечивающие поддержку интеграции с серверными интерфейсами и использующие механизм аутентификации JWT для предоставления доступа клиентам. Данные передаются с использованием подписи MD5 для обеспечения безопасности процесса передачи данных.

Обновление YSF версии 4.2

  • Исправлена ошибка, из-за которой нельзя было свернуть подменю при развёрнутом родительском меню.

Обновление YSF версии 4.0

  • YSF-admin предоставляет REST API-сервисы и использует аутентификацию JWT. Все интерфейсы, начинающиеся с /ysfApi, используют этот метод аутентификации, в то время как другие интерфейсы продолжают использовать аутентификацию Shiro.
  • Spring Boot обновлён до версии 2.2.2!
  • Все HTML, JS и CSS ресурсы были упрощены, уменьшив размер с 11,8 МБ до 4,8 МБ!
  • Добавлен метод для ручного создания вкладок Feng.newCrontab(href, menuName).
  • Плагины Laydate и Layer обновлены до последних версий на официальном сайте Layui, что позволяет разрабатывать приложения, следуя документации Layui.
  • Анимационные эффекты Animate удалены для ускорения загрузки страниц!
  • Исправлена проблема, когда после входа в систему и перезапуска приложения возникала ошибка 404!
  • Улучшены функции основного модуля, предоставляя готовую основу для разработки новых бэкенд-систем управления модулями!
  • Обновлены версии всех зависимых пакетов!
  • Упрощена конфигурация application.yml, и некоторые постоянные настройки теперь хранятся в core-модуле default-config.properties!
  • Оптимизирована конфигурация нескольких источников данных и Mybatis-Plus!
  • Оптимизированы формат и стратегия ведения журнала, подробности см. в logback-spring.xml!
  • Исправлена ошибка, при которой подменю не сворачивалось при развёрнутом родительском меню!

Техническое обсуждение и вики-адрес (https://gitee.com/burningmyself/ysf/wikis/Home)

Если у вас есть вопросы или предложения по проекту, присоединяйтесь к группе технического обмена YSF: 671563641.

Функции системы управления

  1. Управление пользователями.
  2. Управление ролями.
  3. Управление отделами.
  4. Управление меню.
  5. Управление словарями.
  6. Бизнес-логирование.
  7. Логирование входа.
  8. Мониторинг управления.
  9. Управление уведомлениями.
  10. Генерация кода.

Особенности проекта

  1. Основан на Spring Boot, что упрощает конфигурацию проекта и зависимости Maven, позволяя сосредоточиться на бизнес-разработке. Уникальная структура упаковки обеспечивает упорядоченность кода без хаоса.
  2. Комплексная система логирования, способная регистрировать логины, бизнес-операции (с возможностью записи данных до и после операции) и исключения в базе данных. Журналирование операций осуществляется асинхронно через аннотацию @BussinessLog и методы LogObjectHolder.me().set().
  3. Использование Beetl для инкапсуляции и разделения фронтенд-страниц, делая код более компактным и удобным для обслуживания.
  4. Вторичная инкапсуляция часто используемых JS-плагинов для упрощения кода и облегчения обслуживания. Конкретные примеры можно найти в папке webapp/static/js/common.
  5. Ehcache используется для кэширования часто вызываемых запросов, повышая скорость работы. Подробности см. в классе ConstantFactory с аннотацией @Cacheable.
  6. Контроллеры используют подход map + warpper для возврата более гибких данных фронтенду. Подробнее см. в пакете com.xiujing.ysf.modular.system.warpper.
  7. Предотвращение атак XSS через класс XssFilter, который фильтрует и заменяет все недопустимые строки ввода.
  8. Простая и удобная система генерации кода, позволяющая создавать общие контроллеры, HTML-страницы и связанные JS с главной страницей перехода и функциями добавления, изменения, удаления и запроса. Также возможно создание сервисов и Dao. Эти элементы являются опциональными, и их генерация контролируется через ContextConfig с помощью переключателей xxxSwitch. Это позволяет гибко управлять генерацией шаблонов кода и уделять больше времени бизнес-функциям.
  9. Унифицированный механизм обработки исключений в контроллерах через @ControllerAdvice.
  10. Единый шаблон написания ключей-значений для JS на каждой странице, создавая уникальный глобальный объект для каждой страницы. Это повышает эффективность использования JS и предотвращает конфликты имён функций и классов между разработчиками, облегчая обслуживание кода.

Конфигурация на основе JavaBean

YSF стремится к простоте, отказываясь от традиционных громоздких конфигураций XML. Вместо этого используется конфигурация на основе JavaBeans, упрощающая проект и улучшающая читаемость кода. Пример конфигурации MyBatis-Plus и источника данных:

@Configuration
@MapperScan(basePackages = {"com.xiujing.ysf.modular.*.dao", "com.xiujing.ysf.common.persistence.dao"})
public class MybatisPlusConfig {

    @Autowired
    DruidProperties druidProperties;

    /**
     * mybatis-plus分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        paginationInterceptor.setDialectType(DBType.MYSQL.getDb());
        return paginationInterceptor;
    }
}

Логирование бизнес-операций

Логирование осуществляется через AOP (класс LogAop), который перехватывает все методы с аннотацией @BussinessLog. Если операция включает изменение данных, сравниваются текущие параметры запроса HTTP с сохранёнными значениями в LogObjectHolder и Object. Результаты записываются асинхронно в базу данных через ScheduledThreadPoolExecutor. Выше beetl’s использование, пожалуйста, обратитесь к документации beetl.

Обёртывание кода JavaScript, часто используемого в работе

В каталоге webapp/static/js/common есть обёрнутый код для часто используемых функций JavaScript. Например, Feng.js, который содержит методы Feng.info(), Feng.success() и Feng.error(). Эти методы упрощают использование плагина layer для отображения сообщений.

Простой способ загрузки изображений

YSF дважды обёртывает web-upload. Это позволяет реализовать загрузку изображений с помощью всего двух строк кода:

var avatarUp = new $WebUpload("avatar");
avatarUp.init();

Для более подробной информации обратитесь к static/js/common/web-upload-object.js.

Создание уникального контроллера с использованием map и wrapper для возврата данных

Map и wrapper используются для преобразования результатов работы контроллера в формат Map (или исходный формат уже является Map). Затем данные упаковываются в отдельный класс, чтобы сделать параметры более конкретными и значимыми. Вот пример: при возврате пола пользователя из базы данных (1 — мужской, 2 — женский) можно сразу вернуть число, но тогда на стороне клиента потребуется дополнительная проверка. Однако если использовать обёртку, можно напрямую вернуть китайское название пола.

Уникальный перехватчик MyBatis для управления доступом к данным

Перехватчик Ysf для управления доступом к данным работает на основе идентификатора отдела. Если у пользователей одинаковая роль, но разные отделы, то они могут видеть разные данные. Поэтому перехватчик Ysf использует идентификатор отдела в качестве единицы идентификации. Чтобы добавить управление доступом, достаточно добавить объект DataScope в параметры соответствующего метода mapper. DataScope имеет два поля: scopeName, которое используется для обозначения поля идентификатора отдела в SQL-запросе, и deptIds — список идентификаторов отделов, которые будут отфильтрованы. Принцип работы перехватчика заключается в следующем: он перехватывает методы mapper, содержащие объект DataScope, извлекает исходный SQL-запрос и ограничивает данные, отображаемые в соответствии с deptIds.

Использование Swagger для управления API

Swagger управляет всеми методами контроллеров, содержащими аннотацию @ApiOperation. Также можно использовать аннотацию @ApiImplicitParams для маркировки параметров интерфейса. Для получения дополнительной информации обратитесь к использованию в классе CodeController.

@ApiOperation("生成代码")
@ApiImplicitParams({
        @ApiImplicitParam(name = "moduleName", value = "模块名称", required = true, dataType = "String"),
        @ApiImplicitParam(name = "bizChName", value = "业务名称", required = true, dataType = "String"),
        @ApiImplicitParam(name = "bizEnName", value = "业务英文名称", required = true, dataType = "String"),
        @ApiImplicitParam(name = "path", value = "项目生成类路径", required = true, dataType = "String")
})
@RequestMapping(value = "/generate", method = RequestMethod.POST)

Механизм аутентификации JWT

Механизм аутентификации JWT требует, чтобы пользователь получил токен доступа (JWT token) перед запросом к серверу. Только пользователи с токенами могут получить доступ к другим ресурсам сервера. Без токена запросы к интерфейсу будут игнорироваться. При получении токена необходимо предоставить имя пользователя и пароль (или другой метод аутентификации). После успешной проверки будет выдан токен JWT и случайная строка для использования в процессе передачи данных. Подпись основана на алгоритме, описанном ниже. Как и HTTP, механизм аутентификации на основе токенов не требует сохранения состояния пользователя на сервере. Это упрощает расширение приложения.

Алгоритм подписи

Алгоритм подписи заключается в том, что клиент отправляет данные на сервер, предварительно зашифровав их с помощью MD5 и используя случайную строку, полученную от Auth API, для смешивания. Затем клиент передаёт зашифрованные данные вместе с результатом MD5 на сервер. Сервер получает данные, снова шифрует их с помощью MD5, и сравнивает результат с данными, полученными от клиента. Если результаты совпадают, данные считаются неизменными. В противном случае данные считаются изменёнными.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/burningmyself-ysf.git
git@api.gitlife.ru:oschina-mirror/burningmyself-ysf.git
oschina-mirror
burningmyself-ysf
burningmyself-ysf
master