초기소스

This commit is contained in:
jazz
2025-10-29 17:08:05 +09:00
parent e531aa9540
commit 439a379a02
7551 changed files with 1234427 additions and 3 deletions

View File

@@ -0,0 +1,135 @@
package com.wb.domainserver.interceptor.mngr;
import com.wb.domainserver.domain.auth.service.AuthService;
import com.wb.domainserver.domain.auth.vo.AuthVO;
import com.wb.domainserver.realm.RealmContextHolder;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.util.CookieUtils;
import com.wb.domainserver.util.string.StringUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import java.util.List;
public class MngrAuthInterceptor implements HandlerInterceptor{
private static final Logger logger = LoggerFactory.getLogger(MngrAuthInterceptor.class);
@Autowired
private AuthService authService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (!(handler instanceof HandlerMethod handlerMethod)) {
return true;
}
//쿠키 쇼핑몰 코드 조회
String cookieAuthSopmalCd = CookieUtils.getCookieValue("authSopmalCd", request);
//쿠키 쇼핑몰 코드 없을 경우 쿠키 생성 및 쇼핑몰코드 변수저장
if(!StringUtils.hasText(cookieAuthSopmalCd)){
//통합관리자인경우
if("ADMIN".equals(RealmContextHolder.getSopmalCdRealm())){
CookieUtils.createCookie("authSopmalCd", "SYS", "/admin", true, request, response);
cookieAuthSopmalCd = "SYS";
}else{
CookieUtils.createCookie("authSopmalCd", RealmContextHolder.getSopmalCdRealm(), "/mngr", true, request, response);
cookieAuthSopmalCd = RealmContextHolder.getSopmalCdRealm();
}
}
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
//관리자 권한 조회
boolean authChk = mngrAuthChk(request, response, user);
//해당 페이지에 접근권한이 없으면 alert
boolean result = false;
if(authChk){
AuthVO authVO = new AuthVO();
authVO.setMngrInnb(user.getUserInnb());
authVO.setSopmalCd(cookieAuthSopmalCd);
authVO.setSysDvCd(user.getSysDvCd());
String url = request.getRequestURI();
authVO.setFnctUri(url.equals("/") ? url + RealmContextHolder.getRealm().toLowerCase() : url);
// if("itrnt".equalsIgnoreCase(cookieAuthSopmalCd)){ //인트라넷 일 경우
// authVO.setStrOperDv(user.getStrOperDv());
// authVO.setTentGroup(user.getTentGroup());
// authVO.setReprsntBrand(user.getReprsntBrand());
//
// result = authService.selectItrntAuthorSiteAt(authVO);
// }else{
//관리자 + 통합관리자 일 경우
result = authService.selectAuthorSiteAt(authVO);
// }
}
if(!result){
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("<script>alert('해당페이지에 접근 권한이 없습니다. 관리자에게 문의하세요.'); window.history.back();</script>");
response.getWriter().flush();
return false;
}
return true;
}
/**
* 업무관리자 쇼핑몰 권한 조회
* @param request req
* @param response res
* @param user 유저정보
*/
private boolean mngrAuthChk(HttpServletRequest request, HttpServletResponse response, AnonymousUser user){
//권한 리스트 조회
AuthVO authVO = new AuthVO();
authVO.setMngrInnb(user.getUserInnb());
List<String> sopmalList = authService.selectAuthorSopmalList(authVO);
logger.debug("sopmalList {}", sopmalList);
//로그인 요청 쇼핑몰 param 조회
String queryString = request.getParameter("authSopmalCd");
logger.debug("authSopmalCd param :: {}", queryString);
//권한 리스트에 로그인 요청 쇼핑몰 param이 포함되면
String authSopmalCd = "";
if (!StringUtil.isEmpty(queryString) && sopmalList.contains(queryString)) {
// 로그인 요청 쇼핑몰 param 저장
authSopmalCd = queryString;
} else {
//쿠키에 권한 리스트중 첫번째 쇼핑몰 param 저장
if(!sopmalList.isEmpty()){
authSopmalCd = sopmalList.get(0);
}else{
return false;
}
}
CookieUtils.createCookie("authSopmalCd", authSopmalCd, "/mngr", true, request, response);
return true;
}
}

View File

@@ -0,0 +1,410 @@
package com.wb.domainserver.interceptor.mngr;
import com.wb.domainserver.domain.log.service.LogService;
import com.wb.domainserver.domain.log.vo.MngrAccessLogVo;
import com.wb.domainserver.interceptor.wrapper.MultipleReadableRequestWrapper;
import com.wb.domainserver.realm.util.UrlExtractor;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.util.string.StringUtil;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
public class MngrLoggingInterceptor implements HandlerInterceptor {
private static final Logger logger = LoggerFactory.getLogger(MngrLoggingInterceptor.class);
@Autowired
private LogService logService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//기기식별번호 쿠키 생성
String agentId = agentIdHandleCookie(request, response);
// 래핑된 요청 객체 생성
HttpServletRequest wrappedRequest = new MultipleReadableRequestWrapper(request);
//관리자 접근로그 등록
insertMngrAccessLog(wrappedRequest, response, handler, agentId);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// if (handler instanceof HandlerMethod handlerMethod) {
//
// ContentCachingResponseWrapper responseWrapper = null;
// if(response instanceof ContentCachingResponseWrapper) {
// responseWrapper = (ContentCachingResponseWrapper) response;
// } else{
//
// responseWrapper = new ContentCachingResponseWrapper(response);
// }
// 캐싱된 바이트 배열을 UTF-8로 변환하여 반환
// String responseWrapperResult = new String(responseWrapper.getContentAsByteArray(), StandardCharsets.UTF_8);
// logger.debug("responseWrapper ::: {}", responseWrapperResult);
// }
}
/**
* 관리자 접속 로그 등록 함수
* @param logVo
* @return void
*/
private void insertMngrAccessLog(HttpServletRequest request, HttpServletResponse response, Object handler, String agentId) throws IOException {
if (handler instanceof HandlerMethod handlerMethod) {
//호출 서비스 정보
// 컨트롤러 클래스 이름
String controllerName = handlerMethod.getBeanType().getSimpleName();
// 호출된 메소드 이름
String methodName = handlerMethod.getMethod().getName();
// logger.debug("controllerName :: {} methodName :: {} ", controllerName, methodName);
//요청 URL
String url = request.getRequestURI();
// logger.debug("url :: {}", url);
/*관리자 로그 파라미터 지정 url */
String postParam =""; // POST 데이터 읽기
String getParam =""; //GET 데이터 읽기
if(url.contains("/mngr/mbr") //관리자 - 회원
|| url.contains("/mngr/setup/nbkk") // 관리자 - 설정 - 무통장
|| url.contains("/crm/mbr") // CRM - 회원수정, 조회 등
|| url.contains("/crm/dlvylc")){ //CRM - 회원배송지
if ("POST".equalsIgnoreCase(request.getMethod())) {
if("application/json".equalsIgnoreCase( request.getContentType())){
postParam = new String(request.getInputStream().readAllBytes(), request.getCharacterEncoding());
// logger.debug("POST json Data: {}", postParam);
}else{
postParam = getParameterMap(request);
// logger.debug("POST other Data: {}", postParam);
}
}
//get 쿼리스트링
getParam = request.getQueryString();
}
// Controller 정보, Client IP, Headers 등 추가적인 로직 처리 가능
//cookie agentId
// logger.debug("agentId :: {} ", agentId);
//agent 정보
String userAgent = request.getHeader("User-Agent");
// logger.debug("userAgent :: {}", userAgent);
//request referer 정보 확인
String referer = request.getHeader("Referer");
// logger.debug("Referer :: {}", referer);
//ip 정보
String clientIp = request.getHeader("X-Forwarded-For");
if (!StringUtil.isEmpty(clientIp) && clientIp.contains(",")) {
clientIp = clientIp.split(",")[0];
}
if (StringUtil.isEmpty(clientIp)) {
clientIp = request.getRemoteAddr();
}
// logger.debug("clientIp :: {}", clientIp);
request.setAttribute("LoggingClientIp", clientIp);
//host 정보
String host = request.getHeader("X-Original-Host") != null ? request.getHeader("X-Original-Host") : UrlExtractor.getOriginalHost(request);
// logger.debug("host :: {}", host);
//sessionId 정보
String jSessionId = "";
if(request.getCookies() != null){
for(Cookie cookie : request.getCookies()){
if(cookie.getName().equals("JSESSIONID")){
jSessionId = cookie.getValue();
break;
}
}
}
// logger.debug("jSessionId :: {}", jSessionId);
//서버 이름
String serverName = request.getServerName();
// logger.debug("serverName :: {}", serverName);
//접속환경
String env;
String upperUseAgent = userAgent.toUpperCase();
if (upperUseAgent.contains("MOBILE") || upperUseAgent.contains("ANDROID") || upperUseAgent.contains("IPHONE")) {
env = "MO";
} else if (upperUseAgent.contains("TABLET") || upperUseAgent.contains("IPAD")) {
env = "MO";
} else {
env = "PC";
}
request.setAttribute("env", env);
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
//고유 번호 등 개인식별 번호 확인
// logger.debug("sopmalCd :::: {}",user.getSopmalCd());
// logger.debug("userInnb :::: {}", user.getUserInnb());
// logger.debug("MbrDvCd :::: {}", user.getMbrDvCd());
//로그인 하였을 경우 url
// logger.debug("accessUrl :::: {}", user.getAccessUrl());
// logger.debug("clientId :::: {}", user.getClientId());
//접속 log insert
MngrAccessLogVo logVo = new MngrAccessLogVo();
logVo.setAgentId(agentId);
logVo.setSesionId(jSessionId);
String userMngrTy = user.getSopmalCd();
String mngrTy = "";
if("mngr".equalsIgnoreCase(userMngrTy)){ //관리자
mngrTy = "01";
}
if ("sys".equalsIgnoreCase(userMngrTy)){ // 통합관리자
mngrTy = "03";
}
if("itrnt".equalsIgnoreCase(userMngrTy)){// 인트라넷
mngrTy = "02";
}
logVo.setMngrTyCd(mngrTy);
logVo.setMngrInnb(user.getUserInnb());
String authSopmalCd = "";
//관리자 메인 진입시 쇼핑몰 선택했을 경우(로그인시)
if( "/mngr/main".equals(request.getRequestURI()) && !StringUtil.isEmpty(request.getParameter("authSopmalCd"))){
authSopmalCd = request.getParameter("authSopmalCd");
}
//이후 사이트 이동시
if(request.getCookies() != null){
for(Cookie cookie : request.getCookies()){
if(cookie.getName().equals("authSopmalCd")){
authSopmalCd = cookie.getValue();
break;
}
}
}
logVo.setSopmalCd(authSopmalCd);
//메뉴 정보
String[] menu = url.split("/"); // URL 추출
String menuDepth1 = "";
String menuDepth2 = "";
String menuDepth3 = "";
String menuDepth4 = "";
for(int i = 0; i < menu.length; i++){
if(i ==1){
menuDepth1 = menu[i];
}
if(i ==2){
menuDepth2 = menu[i];
}
if(i ==3){
menuDepth3 = menu[i];
}
if(i ==4){
menuDepth4 = menu[i];
}
}
// logger.debug("menuDepth1 :: {}", menuDepth1);
// logger.debug("menuDepth2 :: {}", menuDepth2);
// logger.debug("menuDepth3 :: {}", menuDepth3);
// logger.debug("menuDepth4 :: {}", menuDepth4);
logVo.setMenuGroup(menuDepth1);
logVo.setMenu(menuDepth2);
//로그 타입
String logType = "";
//멤버 조회시(MEMBER)
if("mbr".equals(menuDepth2)){
logType = "01";
//회원검색목록 폼 조회(MEMBERLIST)
if(menuDepth3.contains("selectMbrListInqire")){
logType = "02";
}
} else if ("ordr".equals(menuDepth2)) {
//주문 상세(ORDER)
if("selectOrdrDtlInqire".equals(menuDepth4)){
logType = "03";
}
//주문내역서 팝업 화면 이동 (주문내역 프린트 ORDERPRINT)
if("selectOrdrDtstmnDwldPopupForm".equals(menuDepth4)){
logType = "04";
}
//(주문목록) 엑셀다운로드(ORDEREXCEL)
if("selectExcelDwldListInqire".equals(menuDepth4)){
logType = "08";
}
// 출고 상세(EXPORT)
if("selectDlivyDtlInqire".equals(menuDepth4)){
logType = "05";
}
//출고내역서 팝업 화면 이동 (출고내역 프린트 EXPORTPRINT)
if("selectDlivyDtstmnDwldPopupForm".equals(menuDepth4)){
logType = "10";
}
//반품환불 상세 조회 (REFUND)
if("selectRtngudRefndDtlInqire".equals(menuDepth4)){
logType = "06";
}
}
logVo.setConectLogDvCd(logType);
logVo.setReqstMth(methodName);
logVo.setIp(clientIp);
logVo.setConectEnvrnDv(env);
logVo.setConectDomn(host);
logVo.setConectUrl(url);
logVo.setReqstData(!StringUtil.isEmpty(postParam)?postParam:getParam);
// logger.debug("logging interceptor logVO :::: {}", logVo );
logService.insertMngrAccessLog(logVo);
}
}
/**
* 기기식별번호 쿠키 생성 함수
* @param request
* @return agentId
*/
private String agentIdHandleCookie(HttpServletRequest request, HttpServletResponse response) throws NoSuchAlgorithmException {
String agentId = "";
//agentId 쿠키 있을 경우 가져옴
if (request.getCookies() != null) {
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if (cookie.getName().equals("agent_id")) {
agentId = cookie.getValue();
break;
}
}
}
// 기존 agentId가 없을경우, 새로 발급
if (StringUtil.isEmpty(agentId)) {
//난수 생성
SecureRandom random = SecureRandom.getInstanceStrong();
random.setSeed(System.currentTimeMillis());
agentId = String.valueOf(System.currentTimeMillis());
String host = request.getHeader("X-Forwarded-Host");
if (host == null) {
host = request.getServerName(); // 기본값으로 현재 요청의 호스트명 사용
}
String domain = UrlExtractor.getOriginalHost(host);
String cookieValue = agentId + ":" + md5(agentId + ":" + md5(System.currentTimeMillis() + ":" + random.nextInt())).substring(5, 10);
Cookie agentIdCookie = new Cookie("agent_id", cookieValue);
agentIdCookie.setMaxAge(86400 * 365 * 10); // 10년
agentIdCookie.setDomain(domain);
// agentIdCookie.setHttpOnly(true);
agentIdCookie.setPath("/mngr");
// agentIdCookie.setSecure(true);
response.addCookie(agentIdCookie);
agentId = cookieValue;
}
return agentId;
}
/*쿠키 MD5 생성 함수 */
private String md5(String input) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] digest = md.digest(input.getBytes());
return Base64.getEncoder().encodeToString(digest);
}
/** 특정 쿠키 삭제(메뉴 클릭시에만 메뉴조회되게 하기 위해서) */
private void deleteCookie(HttpServletResponse res, String CookieId){
Cookie cookie = new Cookie(CookieId, null); // 삭제할 쿠키에 대한 값을 null로 지정
cookie.setMaxAge(0); // 유효시간을 0으로 설정해서 바로 만료시킨다.
res.addCookie(cookie); // 응답에 추가해서 없어지도록 함
}
// json 요청이 아닌 post 요청에서 파라미터를 Map으로 변환하는 메서드
private String getParameterMap(HttpServletRequest request) {
Map<String, String> paramMap = new HashMap<>();
Enumeration<String> parameterNames = request.getParameterNames();
while (parameterNames.hasMoreElements()) {
String paramName = parameterNames.nextElement();
String paramValue = request.getParameter(paramName);
paramMap.put(paramName, paramValue);
}
return paramMap.toString();
}
}

View File

@@ -0,0 +1,277 @@
package com.wb.domainserver.interceptor.mngr;
import com.wb.domainserver.domain.admin.sys.author.service.BOMaAuthorService;
import com.wb.domainserver.domain.admin.sys.author.vo.BOMaAuthorVO;
import com.wb.domainserver.domain.admin.sys.menu.service.BOMaMenuService;
import com.wb.domainserver.domain.admin.sys.menu.vo.BOMaMenuVO;
import com.wb.domainserver.domain.gcone.mbr.mbr.service.BOMbrService;
import com.wb.domainserver.domain.gcone.mbr.mbr.vo.BOMbrVO;
import com.wb.domainserver.realm.RealmContextHolder;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.util.string.StringUtil;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AnonymousAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import java.util.HashMap;
import java.util.Map;
public class MngrMenuInterceptor implements HandlerInterceptor {
private static final Logger logger = LoggerFactory.getLogger(MngrMenuInterceptor.class);
@Autowired
private BOMaMenuService menuService;
@Autowired
private BOMaAuthorService boMaAuthorService;
@Autowired
private BOMbrService service;
// controller로 보내기 전에 처리하는 인터셉터
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
String accessUri = request.getRequestURI(); // 현재 요청된 URI
AnonymousUser mngr = MemberJwtContextHolder.getMemberInfo();
String mngrDv = mngr.getMngrDv();
// 헤더의 사용자 이름을 표시하기 위해
String sysDvCd = mngr.getSysDvCd();
String userNm = "";
String itrntDv = "";
//인트라넷 분기처리
if("04".equals(sysDvCd)){
userNm = mngr.getTentcpnNm();
itrntDv = mngr.getItrntDv();
logger.info("MenuInterceptor itrntDv: {}", itrntDv);
}else{
userNm = mngr.getMbrNm();
}
request.setAttribute("userNm", userNm);
request.setAttribute("itrntDv", itrntDv);
// String accessUri = request.getRequestURI(); // 현재 요청된 URI
/** 메뉴 영역 조회 시작 **/
int firstSlashIndex = accessUri.indexOf('/');
int secondSlashIndex = accessUri.indexOf('/', firstSlashIndex + 1);
String systemType = "";
if(!isAjaxRequest(request)) {
// 시스템 구분 : 첫 번째 '/'와 두 번째 '/' 사이의 문자열을 추출
if (firstSlashIndex != -1 && secondSlashIndex != -1 && firstSlashIndex + 1 < secondSlashIndex) {
systemType = accessUri.substring(firstSlashIndex + 1, secondSlashIndex);
logger.info("Extracted system type: {}", systemType);
} else {
systemType = accessUri.substring(firstSlashIndex + 1);
logger.info("Could not find the substring between the first and second slashes.");
}
request.setAttribute("systemType", systemType);
// if(authorizationUrlChecker(systemType)){
// response.setContentType("text/html; charset=UTF-8");
// response.getWriter().write("<script>alert('허용되지 않는 요청입니다.'); location.href='/" + UrlExtractor.getSystemType() + "/main';</script>");
// response.getWriter().flush();
// return false;
// }
}
// 메뉴 클릭여부 체크
String checkMenu = null;
Cookie[] checkMenuCookies = request.getCookies();
if (checkMenuCookies != null) {
for (Cookie cookie : checkMenuCookies) {
if ("checkMenu".equals(cookie.getName())) {
checkMenu = cookie.getValue();
break;
}
}
}
if("/mngr/main".equals(accessUri) || "/admin/main".equals(accessUri) || accessUri.contains("/crm") || accessUri.contains("/itrnt")) {
checkMenu = "Y";
}
// FORM 호출 이후 ajax로 list호출될경우 메뉴 조회 할수 없는 case 방지
if(!isAjaxRequest(request)) {
if(!StringUtil.isEmpty(checkMenu) && "Y".equals(checkMenu)) {
// 통합관리자, 관리자
if("admin".equals(systemType) || "mngr".equals(systemType) || "crm".equals(systemType) || "itrnt".equals(systemType)) {
BOMaMenuVO vo = new BOMaMenuVO();
vo.setUrl(accessUri);
// 사용자가 선택한 URL 정보를 통해 TOP메뉴의 MENU_CD 조회
// 통합관리자
if("admin".equals(systemType)){
vo.setSopmalCd("SYS");
vo.setUpmostMenuCd("sys");
vo.setTopMenuCd("1");
vo.setNextDeptCd1("2");
vo.setNextDeptCd2("3");
// 관리자
}else if("mngr".equals(systemType)){
String cookieAuthSopmalCd = "";
//관리자 메인 진입시 쇼핑몰 선택했을 경우(로그인시)
if( "/mngr/main".equals(request.getRequestURI()) && !StringUtil.isEmpty(request.getParameter("authSopmalCd"))){
cookieAuthSopmalCd = request.getParameter("authSopmalCd");
}
if (request.getCookies() != null) {
Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies) {
if("authSopmalCd".equals(cookie.getName())){
cookieAuthSopmalCd = cookie.getValue();
break;
}
}
}
if(!StringUtils.hasText(cookieAuthSopmalCd)){
cookieAuthSopmalCd = RealmContextHolder.getSopmalCdRealm();
}
vo.setSopmalCd(cookieAuthSopmalCd);
vo.setUpmostMenuCd("adm");
vo.setTopMenuCd("2");
vo.setNextDeptCd1("3");
vo.setNextDeptCd2("4");
//crm
}else if("crm".equals(systemType) ){
vo.setSopmalCd("CM");
vo.setUpmostMenuCd("crm");
}
//인트라넷
else{
vo.setSopmalCd("ITRNT");
vo.setUpmostMenuCd("itrnt");
vo.setTopMenuCd("1");
vo.setNextDeptCd1("2");
vo.setNextDeptCd2("3");
}
if(!"crm".equals(systemType)){
// Top에서 사용자가 선택한 menuCd와 URL정보를 Cookie에서 가져오기
String topMenuCd = null;
String leftMenuCd = null;
String upperMenuCd = null;
String topMenuUrl = null;
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if ("topMenuCd".equals(cookie.getName())) {
topMenuCd = cookie.getValue();
} else if ("leftMenuCd".equals(cookie.getName())) {
leftMenuCd = cookie.getValue();
} else if ("topMenuUrl".equals(cookie.getName())) {
topMenuUrl = cookie.getValue();
} else if ("upperMenuCd".equals(cookie.getName())) {
upperMenuCd = cookie.getValue();
}
if (leftMenuCd != null && topMenuCd != null && upperMenuCd != null && topMenuUrl != null) {
break;
}
}
}
request.getSession().setAttribute("topMenuCd", topMenuCd);
request.getSession().setAttribute("leftMenuCd", leftMenuCd);
request.getSession().setAttribute("upperMenuCd", upperMenuCd);
request.getSession().setAttribute("topMenuUrl", topMenuUrl);
//TOP 메뉴 조회
Map<String, Object> topMenuMap = new HashMap<>();
topMenuMap.put("menuList", menuService.selectBOTopMenuListInqire(vo));
request.setAttribute("topMenuList", topMenuMap);
//LEFT 메뉴 조회
if (!StringUtil.isEmpty(topMenuCd)) {
vo.setUpperMenuCd(topMenuCd);
vo.setTopMenuCd("2");
Map<String, Object> leftMenuMap = new HashMap<>();
leftMenuMap.put("menuList", menuService.selectBOTopMenuListInqire(vo));
request.setAttribute("leftMenuList", leftMenuMap);
}
}else{
//crm 메뉴 조회
Map<String, Object> crmMenuList = new HashMap<>();
crmMenuList.put("menuList", menuService.selectBOCrmMenuListInqire(vo));
request.setAttribute("crmMenuList", crmMenuList);
}
if( "crm".equals(systemType) || "itrnt".equals(systemType)){
request.setAttribute("accessUri", accessUri);
}
//권한 있는 사이트 조회
if ("mngr".equalsIgnoreCase(systemType)||"crm".equalsIgnoreCase(systemType)) {
Map<String, Object> siteList = new HashMap<>();
BOMaAuthorVO boMaAuthorVO = new BOMaAuthorVO();
boMaAuthorVO.setMngrInnb(String.valueOf(mngr.getUserInnb()));
//권한에 있는 쇼핑몰만 조회
siteList.put("siteList", boMaAuthorService.selectBOAuthorSiteList(boMaAuthorVO));
request.setAttribute("siteList", siteList.get("siteList"));
}
request.setAttribute("isAuthenticated", isAuthenticated());
deleteCookie(response, "checkMenu");
}
}
}
/** 메뉴 영역 조회 종료 **/
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
/** Ajax 여부 확인 */
private boolean isAjaxRequest(HttpServletRequest req) {
String header = req.getHeader("x-requested-with");
if ("XMLHttpRequest".equals(header)){
return true;
}else{
return false;
}
}
/** 특정 쿠키 삭제(메뉴 클릭시에만 메뉴조회되게 하기 위해서) */
public void deleteCookie(HttpServletResponse res, String CookieId){
Cookie cookie = new Cookie(CookieId, null); // 삭제할 쿠키에 대한 값을 null로 지정
cookie.setMaxAge(0); // 유효시간을 0으로 설정해서 바로 만료시킨다.
res.addCookie(cookie); // 응답에 추가해서 없어지도록 함
}
/** 로그인 여부 체크 */
private boolean isAuthenticated() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication == null || authentication instanceof AnonymousAuthenticationToken) {
return false;
}
return authentication.isAuthenticated();
}
}