2023. 3. 28. 16:42ใSpring
๋ฉ๋ด ๊ธฐ๋ฅ ๊ตฌํ.
๊ด๋ฆฌ์ ๋ฉ๋ด๋ ๋ฉ์ธ ๋ฉ๋ด์ ์๋ธ ๋ฉ๋ด 2๊ฐ์ง.
๋ฉ๋ด ํ ์ด๋ธ, ์๋ธ ๋ฉ๋ด ํ ์ด๋ธ ์์ฑ
๋ฉ๋ด๋ ๋ฐ๋ก insert ๊ธฐ๋ฅ ํ์ง ์๊ณ db์ ๋ฐ์ดํฐ ๋ฃ๊ณ ์์
--๊ด๋ฆฌ์ ๋ฉ๋ด ์ ๋ณด(์๋จ ๋ฉ๋ด)
CREATE TABLE ADMIN_MENU (
MENU_CODE VARCHAR2(20) CONSTRAINT MENU_PK PRIMARY KEY
, MENU_NAME VARCHAR2(50) NOT NULL
, MENU_URL VARCHAR2(100)
);
DELETE ADMIN_MENU;
INSERT INTO ADMIN_MENU VALUES('MENU_001', '์ํ๊ด๋ฆฌ', '/cateManage');
INSERT INTO ADMIN_MENU VALUES('MENU_002', 'ํ์๊ด๋ฆฌ', '/memberManage');
INSERT INTO ADMIN_MENU VALUES('MENU_003', '์ฃผ๋ฌธ๊ด๋ฆฌ', '/orderManage');
--์๋ธ ๋ฉ๋ด ํ
์ด๋ธ
CREATE TABLE ADMIN_SUB_MENU (
SUB_MENU_CODE VARCHAR2(20) CONSTRAINT SUB_MENU_PK PRIMARY KEY
, SUB_MENU_NAME VARCHAR2(50) NOT NULL
, SUB_MENU_URL VARCHAR2(100)
, MENU_CODE VARCHAR2(20) CONSTRAINT MENU_FK
REFERENCES ADMIN_MENU (MENU_CODE) ON DELETE CASCADE NOT NULL
);
INSERT INTO ADMIN_SUB_MENU VALUES ('SUB_MENU_001', '์นดํ
๊ณ ๋ฆฌ ๊ด๋ฆฌ', '/cateManage', 'MENU_001');
INSERT INTO ADMIN_SUB_MENU VALUES ('SUB_MENU_002', '์ํ ๋ฑ๋ก', '/regItem', 'MENU_001');
INSERT INTO ADMIN_SUB_MENU VALUES ('SUB_MENU_003', '์ํ ์ฌ๊ณ ', '/stockManage', 'MENU_001');
INSERT INTO ADMIN_SUB_MENU VALUES ('SUB_MENU_004', '์ํ ์์ ', '/updateItem', 'MENU_001');
db์ ๋ฃ์ menu ๋ฐ์ดํฐ header.html์์ ์กฐํ๋ ์ ์๊ฒ ํจ.
๋ฉ์ธ ๋ฉ๋ด ์กฐํ ์ฟผ๋ฆฌ ์์ฑ
<!-- ๋ฉ์ธ ๋ฉ๋ด -->
<select id="getAdminMenuList" resultMap="adminMenu">
SELECT MENU_CODE
, MENU_NAME
, MENU_URL
FROM ADMIN_MENU
</select>
AdminService ๋ฉ์๋ ์์ฑ
//๋ฉ์ธ๋ฉ๋ด ์กฐํ
List<AdminMenuVO> getAdminMenuList();
AdminServiceImpl ๋ฉ์๋ ๊ตฌํ
//๋ฉ์ธ ๋ฉ๋ด
@Override
public List<AdminMenuVO> getAdminMenuList() {
return sqlSession.selectList("adminMapper.getAdminMenuList");
}
AdminController ์์ฑ
๋ฉ๋ด ๋ชฉ๋ก์ ์นดํ ๊ณ ๋ฆฌ ๊ด๋ฆฌ ํ์ด์ง ์ฌ ๋ ์นดํ ๊ณ ๋ฆฌ ๋ชฉ๋ก๊ณผ ๊ฐ์ด ์กฐํ๋๋ฉด ๋จ.
//์นดํ
๊ณ ๋ฆฌ ๊ด๋ฆฌ ํ์ด์ง
@GetMapping("/cateManage")
public String cateManage(Model model) {
//๋ฉ์ธ(์๋จ) ๋ฉ๋ด ๋ชฉ๋ก ์กฐํ
model.addAttribute("adminMenuList", adminService.getAdminMenuList());
//์นดํ
๊ณ ๋ฆฌ ๋ชฉ๋ก ์กฐํ
model.addAttribute("cateList", adminService.getCateListForAdmin());
return "content/admin/cate_manage";
}
header.html์ ์กฐํํ ๋ฉ๋ด ๋ฆฌ์คํธ ๋ฟ๋ ค์ฃผ๊ธฐ.
๋ฉ๋ด ๋ชฉ๋ก์ ๊ด๋ฆฌ์์ ์ผ๋ฐํ์์ ๋ฐ๋ผ ๋ฌ๋ผ์ ธ์ผ ๋จ.
ํ์ฌ ์ํ ์ํ๋ชฉ๋กํ์ด์ง์ ์ค๋ฉด ์ผ๋ฐํ์์ด ๋ณด๋ ๋ฉ๋ด๊ฐ ์กฐํ๋๋ ์ํฉ.
์กฐ๊ฑด๋ฌธ์ผ๋ก ๋ก๊ทธ์ธ ์ฌ๋ถ์ ๊ถํ ์ ๋ณด์ ๋ฐ๋ผ ๋ฉ๋ด ๋ค๋ฅด๊ฒ ์กฐํ๋๊ฒ ์ค์ .
<!-- ๋ก๊ทธ์ธ X -->
<th:block th:if="${session.loginInfo == null}">
<th:block th:each="category : ${categoryList}">
<li class="nav-item">
<a class="nav-link">[[${category.cateName}]]</a>
</li>
</th:block>
</th:block>
<th:block th:unless="${session.loginInfo == null}">
<!-- ๋ก๊ทธ์ธ O, ์ผ๋ฐํ์ -->
<th:block th:if="${session.loginInfo.memRole =='USER'}">
<th:block th:each="category : ${categoryList}">
<li class="nav-item">
<a class="nav-link">[[${category.cateName}]]</a>
</li>
</th:block>
</th:block>
<!-- ๋ก๊ทธ์ธ O, ๊ด๋ฆฌ์ -->
<th:block th:if="${session.loginInfo.memRole =='ADMIN'}">
<th:block th:each="adminMenu : ${adminMenuList}">
<li class="nav-item">
<a class="nav-link">[[${adminMenu.menuName}]]</a>
</li>
</th:block>
</th:block>
</th:block>
์๋ธ ๋ฉ๋ด๋ ๋์ผํ๊ฒ ์์ .
์กฐํ ์ฟผ๋ฆฌ
AdminService ๋ฉ์๋ ์์ฑ
AdminServiceImpl ๋ฉ์๋ ๊ตฌํ
์๋ธ๋ฉ๋ด๋ admin_side.html์ ๋ณด์ฌ์ค์ผ ํจ. ๊ฐ์ด ํ๋ฉด์ด ์ด๋ฆฌ๊ธฐ ๋๋ฌธ์ ๊ณต์ ๊ฐ๋ฅ
html์ ๋ฟ๋ ค์ฃผ๊ธฐ
๊ฐ ์๋ธ ๋ฉ๋ด ํด๋ฆญ ์ ํ์ด์ง ์ด๋
์๋ธ ๋ฉ๋ด๋ค html ์์ฑ
์๋ธ ๋ฉ๋ด ํด๋ฆญํ๋ฉด ๊ฐ๊ฐ ํด๋น ํ์ด์ง๋ก ์ด๋ํ๊ฒ ์๋ธ ๋ฉ๋ด๋ค aํ๊ทธ๋ก ๊ฐ์ธ์ค
ํ์ด์ง ์ด๋์ ์กฐํ๋ subMenuUrl ๋ฐ์ดํฐ ์ด์ฉ
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<th:block th:fragment="adminSideFragment">
<div class="row">
<div class="col"> <!-- active -->
<div class="list-group"> <!-- ๋ฉ๋ด์ ์ํ ๊ด๋ฆฌ ๋ฒํผ ํด๋ฆญ ์ -->
<th:bolck th:each="subMenu : ${subMenuList}">
<a th:href="@{'/admin' + ${subMenu.subMenuUrl}}" class="list-group-item list-group-item-action">
[[${subMenu.subMenuName}]]
</a>
</th:bolck>
</div>
</div>
</div>
</th:block>
</html>
๊ฐ๊ฐ์ ์๋ธ๋ฉ๋ด๋ก ํ์ด์ง ์ด๋ํด๋ ๋ฉ๋ด์ ์๋ธ๋ฉ๋ด ๋ชฉ๋ก ์กฐํ ๋์ด์ผ ํจ.
ํด๋น ํ์ด์ง ์ด๋ํ ๋๋ง๋ค ์ ๋ ๋ฉ์๋ ์ฌ์ฉํด์ผ ๋จ.
//์ํ ๋ฑ๋ก ํ์ด์ง
@GetMapping("/regItem")
public String regItemForm(Model model) {
//๋ฉ์ธ(์๋จ) ๋ฉ๋ด ๋ชฉ๋ก ์กฐํ
model.addAttribute("adminMenuList", adminService.getAdminMenuList());
//์๋ธ ๋ฉ๋ด ๋ชฉ๋ก ์กฐํ
model.addAttribute("subMenuList", adminService.getSubMenuList());
return "content/admin/reg_item";
}
//์ํ ์ฌ๊ณ ๊ด๋ฆฌ ํ์ด์ง
@GetMapping("/stockManage")
public String stockManage(Model model) {
//๋ฉ์ธ(์๋จ) ๋ฉ๋ด ๋ชฉ๋ก ์กฐํ
model.addAttribute("adminMenuList", adminService.getAdminMenuList());
//์๋ธ ๋ฉ๋ด ๋ชฉ๋ก ์กฐํ
model.addAttribute("subMenuList", adminService.getSubMenuList());
return "content/admin/stock_manage";
}
//์ํ ์์ ํ์ด์ง
@GetMapping("/updateItem")
public String updateItem(Model model) {
//๋ฉ์ธ(์๋จ) ๋ฉ๋ด ๋ชฉ๋ก ์กฐํ
model.addAttribute("adminMenuList", adminService.getAdminMenuList());
//์๋ธ ๋ฉ๋ด ๋ชฉ๋ก ์กฐํ
model.addAttribute("subMenuList", adminService.getSubMenuList());
return "content/admin/update_item";
}
๋ด๊ฐ ํด๋ฆญํ ์๋ธ ๋ฉ๋ด์ class์ active ์์ฑ์ ์ค์ผ ํด๋ฆญํ ๋ฉ๋ด ์์ฃผ๊ธฐ
์ด๋ค ์๋ธ ๋ฉ๋ด๋ฅผ ํด๋ฆญํ๋์ง ํ๋จํ ์ ์์ด์ผ ํ๋ค.
> subMenuCode (PK)๋ก ํ๋จ ๊ฐ๋ฅ!
ํด๋น ์๋ธ ๋ฉ๋ด์ url์ ํตํด Controller๋ก ์ด๋ํ ๋ ํด๋น ์๋ธ ๋ฉ๋ด์ subMenuCode ๊ฐ ๊ฐ์ ธ๊ฐ์ผ ๋จ.
<th:bolck th:each="subMenu : ${subMenuList}">
<a th:href="@{'/admin' + ${subMenu.subMenuUrl}(subMenuCode=${subMenu.subMenuCode})}" class="list-group-item list-group-item-action">
[[${subMenu.subMenuName}]]
</a>
</th:bolck>
AdminController์์ ๋ชจ๋ ์๋ธ ๋ฉ๋ด ์ปจํธ๋กค๋ฌ๋ค์ subMenuCode ๊ฐ ๋ฐ์์ฃผ๊ธฐ.
์ปค๋งจ๋ ๊ฐ์ฒด ์ฌ์ฉ subMenuCode ๋ฐ์์ค > html๋ก ๋ฐ์ดํฐ ๋ค์ ๋๊ฒจ์ฃผ๊ธฐ ์ํด(์๋ ๋์ด๊ฐ)
ํด๋น ์๋ธ ๋ฉ๋ด ํ์ด์ง๋ก ๋์ด๊ฐ๋ฉด ๊ฐ์ด ์ด๋ฆฌ๋ admin_side.html์์ ๋ฐ์ดํฐ ๊ณต์ ๊ฐ๋ฅ
//์นดํ
๊ณ ๋ฆฌ ๊ด๋ฆฌ ํ์ด์ง
@GetMapping("/cateManage")
public String cateManage(Model model, AdminSubMenuVO adminSubMenuVO) {
//๋ฉ์ธ(์๋จ) ๋ฉ๋ด ๋ชฉ๋ก ์กฐํ
model.addAttribute("adminMenuList", adminService.getAdminMenuList());
//์๋ธ ๋ฉ๋ด ๋ชฉ๋ก ์กฐํ
model.addAttribute("subMenuList", adminService.getSubMenuList());
//์นดํ
๊ณ ๋ฆฌ ๋ชฉ๋ก ์กฐํ
model.addAttribute("cateList", adminService.getCateListForAdmin());
return "content/admin/cate_manage";
}
//์ํ ๋ฑ๋ก ํ์ด์ง
@GetMapping("/regItem")
public String regItemForm(Model model, AdminSubMenuVO adminSubMenuVO) {
//๋ฉ์ธ(์๋จ) ๋ฉ๋ด ๋ชฉ๋ก ์กฐํ
model.addAttribute("adminMenuList", adminService.getAdminMenuList());
//์๋ธ ๋ฉ๋ด ๋ชฉ๋ก ์กฐํ
model.addAttribute("subMenuList", adminService.getSubMenuList());
return "content/admin/reg_item";
}
//์ํ ์ฌ๊ณ ๊ด๋ฆฌ ํ์ด์ง
@GetMapping("/stockManage")
public String stockManage(Model model, AdminSubMenuVO adminSubMenuVO) {
//๋ฉ์ธ(์๋จ) ๋ฉ๋ด ๋ชฉ๋ก ์กฐํ
model.addAttribute("adminMenuList", adminService.getAdminMenuList());
//์๋ธ ๋ฉ๋ด ๋ชฉ๋ก ์กฐํ
model.addAttribute("subMenuList", adminService.getSubMenuList());
return "content/admin/stock_manage";
}
//์ํ ์์ ํ์ด์ง
@GetMapping("/updateItem")
public String updateItem(Model model, AdminSubMenuVO adminSubMenuVO) {
//๋ฉ์ธ(์๋จ) ๋ฉ๋ด ๋ชฉ๋ก ์กฐํ
model.addAttribute("adminMenuList", adminService.getAdminMenuList());
//์๋ธ ๋ฉ๋ด ๋ชฉ๋ก ์กฐํ
model.addAttribute("subMenuList", adminService.getSubMenuList());
return "content/admin/update_item";
}
admin_side.html์์ subMenuCode ๋ฐ์์ค.
์๋ธ ๋ฉ๋ด ์ด๋ ์ ํด๋ฆญํ ์๋ธ ๋ฉ๋ด๊ฐ ๊ฐ์ง subMenuCode์
์ปจํธ๋กค๋ฌ์์ admin_side.html๋ก ์ ๋ฌํ subMenuCode๊ฐ ๊ฐ์ผ๋ฉด active ํด๋์ค ์์ฑ ์ถ๊ฐํ๋ฉด ๋๋ค.
th:classappend ์์ฑ ์ฌ์ฉ(๊ธฐ์กด class ์์ฑ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์์ฑ ์ถ๊ฐํ ๋ ์ฌ์ฉ)
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<th:block th:fragment="adminSideFragment">
<div class="row">
<div class="col"> <!-- active -->
<div class="list-group"> <!-- ๋ฉ๋ด์ ์ํ ๊ด๋ฆฌ ๋ฒํผ ํด๋ฆญ ์ -->
<th:bolck th:each="subMenu : ${subMenuList}">
<a th:href="@{'/admin' + ${subMenu.subMenuUrl}(subMenuCode=${subMenu.subMenuCode})}"
class="list-group-item list-group-item-action"
th:classappend="${subMenu.subMenuCode == adminSubMenuVO.subMenuCode ? 'active' : ''}">
<!-- ์๋ธ ๋ฉ๋ด๊ฐ ๊ฐ์ง ๋ฉ๋ด์ฝ๋ == Controller์์ ๊ฐ์ ธ์จ ๋ฉ๋ด ์ฝ๋ -->
[[${subMenu.subMenuName}]]
</a>
</th:bolck>
</div>
</div>
</div>
</th:block>
</html>
๋ฌธ์ ์
๊ด๋ฆฌ์๋ก ๋ก๊ทธ์ธํด์ ์ฒซ ํ์ด์ง์ธ ์นดํ ๊ณ ๋ฆฌ ๊ด๋ฆฌ ํ์ด์ง ๋ค์ด์ค๋ ๊ฒฝ์ฐ active ์์ฑ ์ ์ฉ ์ ๋จ.
๋ก๊ทธ์ธํ๋ฉด ์ธ๋ฑ์ค ์ปจํธ๋กค๋ฌ๋ก ๊ฐ๋๋ฐ ์ธ๋ฑ์ค ์ปจํธ๋กค๋ฌ์์ ์นดํ ๊ณ ๋ฆฌ ๊ด๋ฆฌ ํ์ด์ง๋ก ์ฌ ๋๋ subMenuCode ๋ฐ์ดํฐ ์ ๋๊ธฐ๊ธฐ ๋๋ฌธ์.
์๋ธ ๋ฉ๋ด ์ฝ๋ null์ผ ๋๋ ๊ฐ์ ๋ก ๋ฉ๋ด ์ฝ๋ ๋ฃ์ด์ค.
//์นดํ
๊ณ ๋ฆฌ ๊ด๋ฆฌ ํ์ด์ง
@GetMapping("/cateManage")
public String cateManage(Model model, AdminSubMenuVO adminSubMenuVO) {
//์ธ๋ฑ์ค ์ปจํธ๋กค๋ฌ์์ ์ฌ ๋๋ ๋ฐ์ดํฐ ์๊ธฐ ๋๋ฌธ์ ์๋ธ ๋ฉ๋ด ์ฝ๋ ๋ฐ์ดํฐ ๋ฃ๊ธฐ.
if(adminSubMenuVO.getSubMenuCode() == null) {
adminSubMenuVO.setSubMenuCode("SUB_MENU_001");
}
//๋ฉ์ธ(์๋จ) ๋ฉ๋ด ๋ชฉ๋ก ์กฐํ
model.addAttribute("adminMenuList", adminService.getAdminMenuList());
//์๋ธ ๋ฉ๋ด ๋ชฉ๋ก ์กฐํ
model.addAttribute("subMenuList", adminService.getSubMenuList());
//์นดํ
๊ณ ๋ฆฌ ๋ชฉ๋ก ์กฐํ
model.addAttribute("cateList", adminService.getCateListForAdmin());
return "content/admin/cate_manage";
}
ํ์ฌ ์ํ
AdminController์์ ์๋ธ ๋ฉ๋ด ์ฌ ๋๋ง๋ค ์ด์ฉ ์ ์์ด ๋ฉ๋ด๋ค์ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ๋ฐ๋ณต์ ์ผ๋ก ๋ฉ๋ด๋ค์ ์กฐํํ๊ณ ์์.
์ฝ๋์ ํ๋ฆ์ ์ํด ์๋ ํด๋น Controller์ ์ฃผ๊ธฐ๋ฅ ์ ์ธํ๊ณ ๋ค๋ฅธ ์ผ๋ค์ ํ๊ณ ์์ (์ ์ฒ๋ฆฌ, ํ์ฒ๋ฆฌ)
์ ์ฒ๋ฆฌ ํ์ฒ๋ฆฌ๋ฅผ ๋ฐ๋ก ๋นผ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ
๊ทธ๋ AOP, intercepter, filter ๋ฑ์ ์ฌ์ฉ.
Intercepter ์ฌ์ฉ
์ธํฐ์ ํฐ ํด๋์ค MenuIntercepter ์์ฑ
HandlerInterceptor๋ฅผ ๊ตฌํ
postHandle ์ค๋ฒ๋ผ์ด๋ฉ
๋ฉ์๋ ์ฌ์ฉ์ ์ํด AdminService ์์กด์ฑ ์ฃผ์
๋ฐ์ดํฐ ๋ณด๋ด๋ฉด์ ๋ฉ๋ด ๋ชฉ๋ก ์กฐํ ๋ฉ์๋ ์คํ.
์ธ์ ๋ฉ์๋ ์คํ, ์ด๋์ ๋ฉ์๋ ์คํํ ์ง ์ค์ .
์ค์ ํด๋์ค IntercepterConfig ์์ฑ (์ค์ ํ์ผ)
WebMvcConfigurer๋ฅผ ๊ตฌํ
@Configuration ์ด๋ ธํ ์ด์ ๋ถ์ฌ์ ์ค์ ํ์ผ์์ ์ธ์, ๊ฐ์ฒด ์์ฑ
์ค๋ฒ๋ผ์ด๋ฉ
package com.study.shop.intercepter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class IntercepterConfig implements WebMvcConfigurer{
@Override
public void addInterceptors(InterceptorRegistry registry) {
//์๋ ๊ฐ์ฒด ์๋ก ๋ง๋๋ ๋ฉ์๋ ์คํ
registry.addInterceptor(getMenuIntercepter())
.addPathPatterns("/admin/cateManage") //์นดํ
๊ณ ๋ฆฌ ๊ด๋ฆฌ ํ์ด์ง
.addPathPatterns("/admin/regItem") //์นดํ
๊ณ ๋ฆฌ ๊ด๋ฆฌ ํ์ด์ง
.addPathPatterns("/admin/stockManage") //์นดํ
๊ณ ๋ฆฌ ๊ด๋ฆฌ ํ์ด์ง
.addPathPatterns("/admin/updateItem"); //์นดํ
๊ณ ๋ฆฌ ๊ด๋ฆฌ ํ์ด์ง
}
//@Bean : ๊ฐ์ฒด๋ฅผ ์๋ฏธ, ๋ฆฌํด๋๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ์์ฑ (ํ๋ก์ ํธ run๊ณผ ๋์์)
@Bean //๋ง๋ ์ธํฐ์
ํฐ ํด๋์ค
public MenuIntercepter getMenuIntercepter() {
return new MenuIntercepter(); //์๋ก์ด ๋ฉ๋ด ์ธํฐ์
ํฐ ๋ง๋ค์ด์ ๋ฆฌํดํด์ค
}
}
Controller์์ ๋ฉ๋ด ์กฐํ ๋ฉ์๋ ๋ค ์ญ์ ํด์ฃผ๊ธฐ. ์ด์ ๋ ์ธํฐ์ ํฐ์์ ๋ค ํจ.
๊ด๋ฆฌ์๊ฐ ์๋ ๊ฒฝ์ฐ ๊ด๋ฆฌ์ ํ์ด์ง๋ก ์ด๋๋๋ ๊ฒ์ ๋ง๋ ๊ธฐ๋ฅ ์ธํฐ์ ํฐ๋ก ์ถ๊ฐ
์ ์ ๊ถํ์ ๋ฐ๋ผ ํ์ด์ง ์ด๋ ๋ชปํ๊ฒ ์ค์ ํ ์ธํฐ์ ํฐ AuthoIntercepter ์์ฑ
HandlerInterceptor ๊ตฌํ
preHandle() ์ค๋ฒ๋ผ์ด๋ฉ
package com.study.shop.intercepter;
import org.springframework.web.servlet.HandlerInterceptor;
import com.study.shop.member.vo.MemberVO;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
public class AuthoIntercepter implements HandlerInterceptor{
//๊ด๋ฆฌ์๊ฐ ์๋๋ฉด ๊ด๋ฆฌ์ ํ์ด์ง์ ์ ๊ทผ์ ๋ง๋ ๊ธฐ๋ฅ
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
HttpSession session = request.getSession();
MemberVO loginInfo = (MemberVO)session.getAttribute("loginInfo");
//null์ด๋ฉด true
boolean condition1 = loginInfo == null;
//๊ด๋ฆฌ์X๋ฉด true
boolean condition2 = loginInfo != null && loginInfo.getMemRole().equals("USER");
if(condition1 || condition2) {
response.sendRedirect("/");
return false;
}
return true;
}
}
IntercepterConfig ์์
package com.study.shop.intercepter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class IntercepterConfig implements WebMvcConfigurer{
@Override
public void addInterceptors(InterceptorRegistry registry) {
//์๋์ ๊ฐ์ฒด ์๋ก ๋ง๋๋ ๋ฉ์๋ ์คํ
registry.addInterceptor(getMenuIntercepter())
.order(2)
.addPathPatterns("/admin/cateManage") //์นดํ
๊ณ ๋ฆฌ ๊ด๋ฆฌ ํ์ด์ง
.addPathPatterns("/admin/regItem")
.addPathPatterns("/admin/stockManage")
.addPathPatterns("/admin/updateItem");
//ajax ์คํ๋๋ ๋ฉ์๋์๋ ์ธํฐ์
ํฐ ์ ์ธ ์์ผ์ผ ํจ.(ajax ๊ฐ์ด ์ฐ๋ฉด ์ถฉ๋)
registry.addInterceptor(getaAuthoIntercepter())
.order(1) //์ธํฐ์
ํฐ ์ค ์ฒซ๋ฒ์งธ๋ก ์คํ(์์ ์ง์ )
.addPathPatterns("/admin/**") //๊ด๋ฆฌ์ ๊ด๋ จ ํ์ด์ง ๋ค์ด๊ฐ ๋๋ง๋ค
.excludePathPatterns("/admin/*Ajax"); //*Ajax๋ก ๋๋๋ ์ด๋๊ฒฝ๋ก ์ ์ธ
}
//@Bean : ๊ฐ์ฒด๋ฅผ ์๋ฏธ, ๋ฆฌํด๋๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ์์ฑ (ํ๋ก์ ํธ run๊ณผ ๋์์)
@Bean //๋ง๋ ์ธํฐ์
ํฐ ํด๋์ค
public MenuIntercepter getMenuIntercepter() {
return new MenuIntercepter(); //์๋ก์ด ๋ฉ๋ด ์ธํฐ์
ํฐ ๋ง๋ค์ด์ ๋ฆฌํดํด์ค
}
@Bean
public AuthoIntercepter getaAuthoIntercepter() {
return new AuthoIntercepter();
}
}
**์ฃผ์์ฌํญ
ajax์ intercepter ๊ฐ์ด ์ฐ์ง ๋ง๊ธฐ! ์ถฉ๋๋ผ์ ์ค๋ฅ ์๊น.
ajax ์ฐ๋ ๊ณณ์ intercepter ์ ์ธ ์ํค๊ธฐ.
js์์ ์ด๋๊ฒฝ๋ก /admin์ธ ๊ณณ์ธ๋ฐ ajax ๊ฐ์ด ์ฌ์ฉํ๋ฉด ์ด๋ ๊ฒฝ๋ก ๋ง์ง๋ง์ Ajax ๋ถ์ฌ์ฃผ๊ธฐ
โป ์๋ธ ๋ฉ๋ด ์์
DB์์ 'SUB_MENU_004' ์ญ์
DELETE ADMIN_SUB_MENU WHERE SUB_MENU_CODE = 'SUB_MENU_004';
'SUB_MENU_003'์ ์์
์ด์ ์๋ธ ๋ฉ๋ด์๋ ์ฌ๊ณ ๊ด๋ฆฌ(๋ฉ๋ด003)์ ์ํ ์ ๋ณด ์์ (๋ฉ๋ด004) ๋ฉ๋ด๋ฅผ 'SUB_MENU_003'์ธ ์ํ๊ด๋ฆฌ๋ก ํฉ์นจ.
UPDATE ADMIN_SUB_MENU
SET
SUB_MENU_NAME = '์ํ ๊ด๋ฆฌ'
, SUB_MENU_URL = '/itemManage'
WHERE SUB_MENU_CODE = 'SUB_MENU_003';
์ด์ ์์ฑํ updateItem Controller ์ง์์ฃผ๊ณ update_item.html๋ ์ญ์
stock_manage.html์ item_manage.html๋ก ์์
์ํ ์ฌ๊ณ controller๋ฅผ ์ํ ๊ด๋ฆฌ ํ์ด์ง controller๋ก ์์ .
//์ํ ๊ด๋ฆฌ ํ์ด์ง
@GetMapping("/itemManage")
public String stockManage(Model model, AdminSubMenuVO adminSubMenuVO) {
return "content/admin/item_manage";
}
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ผํ๋ชฐ ํ๋ก์ ํธ(8) ์ํ ๋ฑ๋ก (0) | 2023.03.29 |
---|---|
์์ง๋ ๋์ด๋ Intercepter (0) | 2023.03.29 |
์ผํ๋ชฐ ํ๋ก์ ํธ(6) ์ํ (0) | 2023.03.28 |
์ผํ๋ชฐ ํ๋ก์ ํธ(5) ๋ก๊ทธ์ธ ๊ธฐ๋ฅ (0) | 2023.03.28 |
์ผํ๋ชฐ ํ๋ก์ ํธ(4) ํ์ ๊ฐ์ ๊ธฐ๋ฅ (0) | 2023.03.27 |