4-1. 🏗️ Үндсэн функц үндсэн бүтэц
4.1 Төслийн эх кодын бүтэц
HONGIKINGAN CMS нь хоёр гол модулиас бүрдэнэ.
4.1.1 BO (humanframe.backoffice)
Админ хэсэг болон үндсэн системийн ажиллагаа, хуваарь зэрэг мета өгөгдлийг удирдах төсөл. CMS-ийн үндсэн админ функц болон системийн үйл ажиллагаанд шаардлагатай элементүүд байх бөгөөд хөгжүүлэгч шууд засварлах боломжтой.
Үндсэн багцын бүтэц
aop.aspect
Админ AOP хэрэгжүүлэлт, админ самбарын эрх шалгах, админ лог хадгалах, хэрэглэгчийн самбарын эрх шалгах болон тохиргоо харах
- admin: Админтай холбоотой AOP (AdminBbsAspect, AdminLogAspect, AdminPrivacyAspect гэх мэт)
- web: Хэрэглэгчтэй холбоотой AOP (UsrChkAuthBeforeAspect, UsrChkPermNttBeforeAspect гэх мэт)
common
Нийтлэг функц тодорхойлолт - нийтлэг кодын зураглал, DB кодын админ ялгаж системийн үйл ажиллагааны үед бүртгэл өөрчлөх шаардлагагүй код өгөгдлийг цуглуулсан бөгөөд аль болох засварлахгүй байх, засварлах үед анхаарал шаардлагатай
controller
Spring контроллер классуудын цуглуулга, системийн үйл ажиллагаа болон CMS суурьтай програмын контроллер
| 📁 Багц | 📋 Тайлбар |
|---|---|
| ajax | AJAX хүсэлт боловсруулах контроллер |
| banner | Баннер удирдлагын контроллер |
| bbs | Самбар удирдлагын контроллер |
| cm | Нийтлэг удирдлагын контроллер |
| cntnts | Контент удирдлагын контроллер |
| comm | Нийтлэг контроллер |
| dashboard | Хяналтын самбарын контроллер |
| fnct | Функцтэй холбоотой контроллер |
| front | Фронтэнд холбоотой контроллер |
| index | Индекс хуудасны контроллер |
| login | Нэвтрэх холбоотой контроллер |
| mber | Гишүүн удирдлагын контроллер |
| media | Медиа удирдлагын контроллер |
| metadata | Мета өгөгдөл удирдлагын контроллер |
| mng | Удирдлагын функцийн контроллер |
| oauth | OAuth баталгаажуулалт холбоотой контроллер |
| pblcate | Нийтлэл холбоотой контроллер |
| popup | Попап удирдлагын контроллер |
| privacy | Хувийн мэдээлэл удирдлагын контроллер |
| site | Сайт удирдлагын контроллер |
| stats | Статистик удирдлагын контроллер |
dao
Data Access Object цуглуулга, төрөл бүрийн DAO
interceptor
Админ Interceptor хэрэгжүүлэлт, админ нэвтрэх шалгалт, URI параметр шалгалт гэх мэт
scheduler
Системийн хуваарь удирдлага, мини самбарын JSON өгөгдөл үүсгэх, цэсийн статистик өгөгдөл үүсгэх
service
Spring сервис болон хэрэгжүүлэлт классууд
- impl: Сервис хэрэгжүүлэлт классууд
session
Админ болон хэрэглэгчийн Session классууд
tld.button
JSP Tag Library зэрэг таг классууд
util
Төрөл бүрийн утилит классууд
view
RssViewer класс
vo
Value Object классууд
4.1.2 WEB (humanframe.web)
CMS-ийн хэрэглэгчийн хэсгийн Java классууд болон Frontend Presentation (дэлгэцийн нөөц, хэрэглэгчийн контент боловсруулалт)-д зориулсан төрөл бүрийн нөөц (jsp, xml, js, css гэх мэт)-ээс бүрдэнэ. Голчлон, CMS-ийн үндсэн функц биш нэмэлт функцийн бүх програмын эх код (Java class, jsp, xml гэх мэт) энэ төсөлд багтана.
Үндсэн багцын бүтэц
common
Нийтлэг функц тодорхойлолт - нийтлэг кодын зураглал, нийтлэг тогтмол гэх мэт
controller
Spring контроллер классуудын цуглуулга, нэмэлт хөгжүүлэлтийн програмын контроллер
- admin: Админ функцийн контроллер
- front: Фронтэнд контроллер
dao
Data Access Object цуглуулга, төрөл бүрийн DAO
filter
XSSWebFilter, MberLoginFilter гэх мэт
interceptor
Хэрэглэгчийн URIInterceptor хэрэгжүүлэлт, дамжуулсан URI шалгалт болон URI-д тохирсон цэсийн мэдээлэл холбох
security
Шифрлэлт холбоотой классууд
service
Spring сервис болон хэрэгжүүлэлт классууд
- impl: Сервис хэрэгжүүлэлт классууд
vo
Value Object классууд
4.2 Нөөцийн бүтэц
4.2.1 Spring Context тохиргооны файл
HONGIKINGAN CMS нь олон төрлийн Spring Context тохиргооны файлаар дамжуулан системийн үйл ажиллагааг тодорхойлдог.
context-backoffice.xml
Админ хэрэглэгчийн сэшн bean тодорхойлолт
context-crypto.xml
Шифрлэлт bean тодорхойлолт
context-datasource.xml
Өгөгдлийн сан холболтын тохиргоо
context-mapper.xml
MyBatis маппер тохиргоо
context-properties.xml
Системийн шинж чанарын тохиргоо
context-scheduler.xml
Хуваарь bean тодорхойлолт, мини самбар, цэсийн статистик
context-transaction.xml
Гүйлгээний удирдлагын тохиргоо
human-resource.xml
Нөөц холбоотой тохиргоо
4.2.2 Веб апп-ын бүтэц
Веб аппликейшн нь дараах үндсэн лавлахуудаас бүрдэнэ:
common
Нийтлэг нөөц
data
Өгөгдлийн файл
humanframe
CMS-ийн үндсэн нөөц
- admin: Админ хуудасны нөөц
- theme: Хэрэглэгчийн загварын нөөц
- global: Нийтлэг нөөц
json
JSON өгөгдлийн файл
webeditor
Веб засварлагчийн нөөц
webeditorplus
Өргөтгөсөн веб засварлагчийн нөөц
WEB-INF
Веб аппликейшний тохиргоо болон классын файл
- jsp: JSP файл
- config: Тохиргооны файл
- tld: Таг номын сангийн тодорхойлолтын файл
4.3 Хэрэглэгчийн удирдлага
4.3.1 Баталгаажуулалт болон эрхийн удирдлага
HONGIKINGAN CMS нь хэрэглэгчийн баталгаажуулалт болон эрхийн удирдлагад зориулж Spring Security болон өөрөө хөгжүүлсэн эрхийн удирдлагын системийг хамтад ашигладаг.
Үндсэн функц
- Хэрэглэгчийн нэвтрэх/гарах
- Эрхийн бүлгийн удирдлага
- Цэс тус бүрийн хандалтын эрх тохируулах
- Самбар тус бүрийн эрх тохируулах
- IP суурьтай хандалтын хяналт
Эрхийн удирдлагын бүтэц
Хэрэглэгч/Админ
Эрхийн бүлэг
Цэс/Функц
Үндсэн класс
humanframe.backoffice.interceptor.CMSAdminInterceptor: Админ эрх шалгахhumanframe.backoffice.aop.aspect.admin.AdminBbsAspect: Эрх шалгах AOPhumanframe.backoffice.aop.aspect.admin.AdminPrivacyAspect: Хувийн мэдээлэлд хандах шалгах AOP
// [Кодын байршил] humanframe.backoffice.aop.aspect.admin.AdminBbsAspect
@Aspect
@Order(1)
@Component
public class AdminBbsAspect {
// Админ эрх шалгах
@Pointcut("execution(* humanframe.backoffice..AdminBbsType*Controller.form(..))"
+ "|| execution(* humanframe.backoffice..AdminBbsType*Controller.list(..))"
+ "|| execution(* humanframe.backoffice..AdminBbsType*Controller.view(..))"
+ "|| execution(* humanframe.backoffice..AdminBbsType*Controller.action(..))"
+ "|| execution(* humanframe.backoffice..AdminBbsType*Controller.answer(..))")
private void checkAdminBbsAuth() {}
@Before(value = "checkAdminBbsAuth()")
private void beforeCheckAdminBbsAuth(
JoinPoint joinPoint)throws Exception {
// ... дунд хэсэг орхигдсон (эрх шалгах логик) ...
}
}
4.3.2 Сэшний удирдлага
HONGIKINGAN CMS нь хэрэглэгч болон админ сэшнийг тусад нь удирдаж, сэшний хугацаа дуусах, зэрэг нэвтрэх хяналт зэрэг функцийг өгдөг.
Үндсэн функц
- Сэшн үүсгэх болон удирдах
- Сэшний хугацаа дуусах тохиргоо
- Зэрэг нэвтрэх хяналт
- Сэшний мэдээлэл шифрлэх
Үндсэн класс
humanframe.backoffice.session.MngrSession: Админ сэшний классhumanframe.backoffice.session.MberSession: Хэрэглэгчийн сэшний класс
// [Кодын байршил] humanframe.backoffice.session.MngrSession
public class MngrSession implements Serializable {
private static final long serialVersionUID = 1L;
private String mngrId;
private String mngrNm;
private String authorTy;
private String[] siteNos;
private String[] siteMenus;//for cntnts
private String[] fnctNos;//for fnct
private String[] bbsNos;//for bbs
// Сэшний мэдээлэл тохируулах болон харах арга
// ...
}
4.3.3 Хэрэглэгчийн мэдээллийн удирдлага
Хэрэглэгчийн мэдээллийн удирдлага нь гишүүнчлэл, мэдээлэл засах, гарах зэрэг функцийг агуулна.
Үндсэн функц
- Гишүүнчлэл/засах/гарах
- Нууц үг шифрлэх
- Имэйл/SMS баталгаажуулалт
- Нийгмийн нэвтрэх холбох
- Хувийн мэдээлэл хамгаалах функц
Үндсэн класс
humanframe.backoffice.controller.mber.AdminMberController: Гишүүн удирдлагын контроллерhumanframe.backoffice.service.MberService: Гишүүн удирдлагын сервисhumanframe.backoffice.dao.MberDAO: Гишүүн удирдлагын DAO
4.4 Контентийн удирдлага
4.4.1 Цэсний удирдлага
HONGIKINGAN CMS нь вебсайтын цэсний бүтцийг үр ашигтай удирдах боломжийг олгодог.
Үндсэн функц
- Давхаргат цэсний бүтэц удирдах
- Цэсний дараалал өөрчлөх
- Цэс тус бүрийн эрх тохируулах
- Цэс идэвхжүүлэх/идэвхгүй болгох
- Цэсний статистик удирдах
Үндсэн класс
humanframe.backoffice.controller.mng.AdminMngMenuController: Цэс удирдлагын контроллерhumanframe.backoffice.service.MngMenuService: Цэс удирдлагын сервисhumanframe.backoffice.dao.MngMenuDAO: Цэс удирдлагын DAO
Цэс удирдлагын дэлгэц
Админ хуудасны "CMS удирдлага > Цэс удирдлага" цэснээс цэсний бүтцийг модны хэлбэрээр удирдах боломжтой.
4.4.2 Сайт/Цэс тараах систем
HONGIKINGAN CMS нь админ хуудас дээрх сайт болон цэсний өөрчлөлт хэрэглэгчийн хуудсанд шууд тусгагдахгүй, харин 'тараалт (Publication)' үйл явцаар дамжуулан тусгагддаг бүтэцтэй. Энэ нь админ өөрчлөлтийг хянаж, баталгаажуулсны дараа бодит хэрэглэгчийн хуудсанд хэрэглэх боломжийг олгодог аюулгүй байдлын арга юм.
Хүснэгтийн харилцаа
TN_SITE
↓
TN_PBLCATE_SITE
TN_SITE_MENU
↓
TN_PBLCATE_SITE_MENU
- TN_SITE ↔ TN_PBLCATE_SITE
- TN_SITE: Админ засварладаг сайтын мэдээллийн хүснэгт
- TN_PBLCATE_SITE: Тараасны дараа хэрэглэгчид бодитоор харагдах сайтын мэдээллийн хүснэгт
- TN_SITE_MENU ↔ TN_PBLCATE_SITE_MENU
- TN_SITE_MENU: Админ засварладаг цэсний мэдээллийн хүснэгт
- TN_PBLCATE_SITE_MENU: Тараасны дараа хэрэглэгчид бодитоор харагдах цэсний мэдээллийн хүснэгт
Тараах үйл явц
✏️ Мэдээлэл засах
Админ TN_SITE эсвэл TN_SITE_MENU хүснэгтийн мэдээллийг засварладаг.
🚀 Тараалт гүйцэтгэх
Админ 'тараалт' функцийг ажиллуулдаг.
📋 Мэдээлэл хуулах
Систем засварласан мэдээллийг TN_PBLCATE_SITE эсвэл TN_PBLCATE_SITE_MENU хүснэгтэд хуулдаг.
🌐 Хэрэглэгчийн хуудсанд тусгах
Хэрэглэгчийн хуудас нь TN_PBLCATE_SITE болон TN_PBLCATE_SITE_MENU хүснэгтийн мэдээлэлд үндэслэн сайт болон цэсийг харуулдаг.
Тараах системийн давуу тал
Тогтвортой байдал
Админы өөрчлөлт шалгалтгүйгээр шууд хэрэглэгчийн хуудсанд тусгагдахгүй тул тогтвортой үйлчилгээ үзүүлэх боломжтой.
Шалгалт
Админ өөрчлөлтийг тараахаас өмнө хангалттай хянаж болно.
Багц хэрэглэх
Олон өөрчлөлтийг нэг дор тараах боломжтой тул сайтын бүтэц өөрчлөх үед тууштай байдлыг хадгалж чадна.
Буцаах боломж
Асуудал гарвал өмнөх төлөвт буцаах нь хялбар.
4.4.3 Самбарын удирдлага
Төрөл бүрийн самбар үүсгэж удирдах боломжийг олгодог.
Самбарын төрөл
| 📋 Төрөл | 📝 Тайлбар |
|---|---|
| Type 1 | Ерөнхий самбар |
| Type 2 | Хариулт бүхий самбар |
| Type 3 | Зургийн самбар |
| Type 4 | Видео самбар |
| Type 5 | Q&A самбар |
| Type 6 | FAQ самбар |
| Type 7 | Хуваарийн самбар |
| Type 8 | Холбоосын самбар |
Үндсэн функц
- Самбар үүсгэх/засах/устгах
- Нийтлэл удирдах
- Сэтгэгдэл удирдах
- Хавсралт файл удирдах
- Самбар тус бүрийн эрх тохируулах
- Нийтлэл хайх болон шүүх
Үндсэн класс
humanframe.backoffice.controller.bbs.AdminBbsController: Самбар удирдлагын контроллерhumanframe.backoffice.controller.bbs.AdminBbsSettingController: Самбар тохиргооны контроллерhumanframe.backoffice.controller.bbs.AdminBbsType1Controller: Ерөнхий самбарын контроллерhumanframe.backoffice.service.BbsSettingService: Самбар удирдлагын сервисhumanframe.backoffice.dao.BbsSettingDAO: Самбар тохиргооны DAOhumanframe.backoffice.dao.BbsTypeDAO: Самбарын төрөл бүрийн DAO
// [Кодын байршил] humanframe.backoffice.service.BbsSettingService
@SuppressWarnings("rawtypes")
public interface BbsSettingService {
/**
* Самбарын жагсаалтыг харах.
*
* @param listVO хайлтын нөхцөл
* @return самбарын жагсаалт
*/
public HumanListVO boardListVo(HumanListVO listVO) throws Exception;
/**
* Самбарын мэдээллийг харах.
*
* @param bbsNo самбарын дугаар
* @return самбарын мэдээлэл
*/
public BbsSettingVO retrieveBoardSetting(int bbsNo) throws Exception;
// ... бусад арга
}
4.4.4 Контентийн удирдлага
Хуудас бүрдүүлэх контентийг удирдах боломжийг олгодог.
Үндсэн функц
- Контент үүсгэх/засах/устгах
- Загвар суурьтай хуудас удирдах
- HTML засварлагч дэмжих
- SEO оновчлолын тохиргоо
- Контент урьдчилан харах
- Контентийн хувилбар удирдах
Үндсэн класс
humanframe.backoffice.controller.cntnts.AdminCntntsController: Контент удирдлагын контроллерhumanframe.backoffice.service.CntntsService: Контент удирдлагын сервисhumanframe.backoffice.dao.CntntsDAO: Контент удирдлагын DAOhumanframe.backoffice.vo.CntntsVO: Контентийн VO
4.5 Файл болон медиа удирдлага
4.5.1 Файл оруулах/татах
HONGIKINGAN CMS нь төрөл бүрийн файлын оруулах болон татахыг аюулгүй боловсруулах функцийг олгодог.
Үндсэн функц
- Олон файл оруулах
- Файлын төрөл хязгаарлах
- Файлын хэмжээ хязгаарлах
- Файл шифрлэх
- Татах эрхийн удирдлага
- Татах статистик
Файл оруулах боловсруулалтын урсгал
Клиентийн хүсэлт
MultipartResolver
Файлын хүчинтэй байдал шалгах
Файл хадгалах
Мета өгөгдөл DB-д хадгалах
Үндсэн класс
humanframe.backoffice.controller.media.AdminMediaController: Медиа удирдлагын контроллерhumanframe.backoffice.service.FileService: Файл удирдлагын сервисhumanframe.backoffice.util.FileDownload: Файл татах утилитhumanframe.backoffice.util.FileUtil: Файл туслах утилит
// FileUtil классын хэсэг
/** Файлын нэрийн зөв эсэх шалгах **/
public static boolean isValidFileName(String fileName) {
// Үсэг, тоо, монгол, хятад, япон үсэг, хаалт, дөрвөлжин хаалт, бүдүүн хаалт, зураас, доогуур зураас, цэг, хоосон зайг зөвшөөрч
// Windows-д файлын нэрэнд ашиглах боломжгүй тэмдэгт (\ / : * ? " < > |)-ийг хасан тогтмол илэрхийлэл
final String FILE_NAME_PATTERN = "^[\w\-.()\[\]{} 가-힣一-鿿-ゟ゠-ヿ]+$";
final Pattern pattern = Pattern.compile(FILE_NAME_PATTERN);
if (fileName == null || fileName.trim().isEmpty()) {
return false;
}
Matcher matcher = pattern.matcher(fileName);
return matcher.matches();
}
4.5.2 Зураг боловсруулах
Зургийн файлд зориулсан тусгай боловсруулалтын функцийг олгодог.
Үндсэн функц
- Зургийн хэмжээ өөрчлөх
- Жижиг зураг үүсгэх
- Зургийн усны тэмдэг
- Зураг оновчлох
- Зургийн цомог
Үндсэн класс
humanframe.backoffice.service.FileService: Файл удирдлагын сервисhumanframe.backoffice.util.ImageProcess: Зураг татах утилитnet.coobird.thumbnailator.Thumbnails: Жижиг зураг үүсгэх номын сан
FileServiceImpl классын хэсэг (жижиг зураг үүсгэх)
public void creatFileInfo(
Map<String, MultipartFile> fileMap
, int upperNo
, String srvcId
, Map<String,Object> reqMap) throws Exception {
// ... (дунд хэсэг орхигдсон)
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
try {
if ((EgovStringUtil.equals("jpg", fileExtsn)
|| EgovStringUtil.equals("gif", fileExtsn)
|| EgovStringUtil.equals("png", fileExtsn)
|| EgovStringUtil.equals("bmp", fileExtsn))) {
Thumbnails.of(tempFile).size(StaticValues.SMALL_THUMB_SIZE_X, StaticValues.SMALL_THUMB_SIZE_Y)
.toFile(new File(WebUtil.filePathReplaceAll(filePath + "/"+ srvcId +"/" + toDay + "/" + StaticValues.SMALL_THUMB_PREFIX+"_"+ newFileName)));
Thumbnails.of(tempFile).size(StaticValues.MEDIUM_THUMB_SIZE_X, StaticValues.MEDIUM_THUMB_SIZE_Y)
.toFile(new File(WebUtil.filePathReplaceAll(filePath + "/"+ srvcId +"/" + toDay + "/" + StaticValues.MEDIUM_THUMB_PREFIX+"_"+ newFileName)));
Thumbnails.of(tempFile).size(StaticValues.LARGE_THUMB_SIZE_X, StaticValues.LARGE_THUMB_SIZE_Y)
.toFile(new File(WebUtil.filePathReplaceAll(filePath + "/"+ srvcId +"/" + toDay + "/" + StaticValues.LARGE_THUMB_PREFIX+"_"+ newFileName)));
}
}
// ... (дунд хэсэг орхигдсон)
}
// ... (дунд хэсэг орхигдсон)
}
4.5.3 Медиа удирдлага
Зураг, видео зэрэг төрөл бүрийн медиа файлыг удирдах функцийг олгодог.
Үндсэн функц
- Медиа файл оруулах
- Медиа мета өгөгдөл удирдах
- Медиа тоглуулагч холбох
- Стрийминг үйлчилгээ холбох
Үндсэн класс
humanframe.backoffice.controller.media.AdminMediaController: Медиа удирдлагын контроллерhumanframe.backoffice.service.MediaService: Медиа удирдлагын сервисhumanframe.backoffice.dao.MediaDAO: Медиа удирдлагын DAOhumanframe.backoffice.vo.MediaVO: Медиа VO