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
Техническое обсуждение и вики-адрес (https://gitee.com/burningmyself/ysf/wikis/Home)
Если у вас есть вопросы или предложения по проекту, присоединяйтесь к группе технического обмена YSF: 671563641.
Функции системы управления
Особенности проекта
Конфигурация на основе 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.
В каталоге 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 (или исходный формат уже является Map). Затем данные упаковываются в отдельный класс, чтобы сделать параметры более конкретными и значимыми. Вот пример: при возврате пола пользователя из базы данных (1 — мужской, 2 — женский) можно сразу вернуть число, но тогда на стороне клиента потребуется дополнительная проверка. Однако если использовать обёртку, можно напрямую вернуть китайское название пола.
Перехватчик Ysf для управления доступом к данным работает на основе идентификатора отдела. Если у пользователей одинаковая роль, но разные отделы, то они могут видеть разные данные. Поэтому перехватчик Ysf использует идентификатор отдела в качестве единицы идентификации. Чтобы добавить управление доступом, достаточно добавить объект DataScope в параметры соответствующего метода mapper. DataScope имеет два поля: scopeName, которое используется для обозначения поля идентификатора отдела в SQL-запросе, и deptIds — список идентификаторов отделов, которые будут отфильтрованы. Принцип работы перехватчика заключается в следующем: он перехватывает методы mapper, содержащие объект DataScope, извлекает исходный SQL-запрос и ограничивает данные, отображаемые в соответствии с deptIds.
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 token) перед запросом к серверу. Только пользователи с токенами могут получить доступ к другим ресурсам сервера. Без токена запросы к интерфейсу будут игнорироваться. При получении токена необходимо предоставить имя пользователя и пароль (или другой метод аутентификации). После успешной проверки будет выдан токен JWT и случайная строка для использования в процессе передачи данных. Подпись основана на алгоритме, описанном ниже. Как и HTTP, механизм аутентификации на основе токенов не требует сохранения состояния пользователя на сервере. Это упрощает расширение приложения.
Алгоритм подписи заключается в том, что клиент отправляет данные на сервер, предварительно зашифровав их с помощью MD5 и используя случайную строку, полученную от Auth API, для смешивания. Затем клиент передаёт зашифрованные данные вместе с результатом MD5 на сервер. Сервер получает данные, снова шифрует их с помощью MD5, и сравнивает результат с данными, полученными от клиента. Если результаты совпадают, данные считаются неизменными. В противном случае данные считаются изменёнными.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )