최초커밋
This commit is contained in:
1544
backend/src/main/java/com/pms/service/AdminService.java
Normal file
1544
backend/src/main/java/com/pms/service/AdminService.java
Normal file
File diff suppressed because it is too large
Load Diff
110
backend/src/main/java/com/pms/service/AuthService.java
Normal file
110
backend/src/main/java/com/pms/service/AuthService.java
Normal file
@@ -0,0 +1,110 @@
|
||||
package com.pms.service;
|
||||
|
||||
import com.pms.common.utils.EncryptUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.mybatis.spring.SqlSessionTemplate;
|
||||
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class AuthService {
|
||||
|
||||
private final SqlSessionTemplate sqlSessionTemplate;
|
||||
|
||||
private static final String MASTER_PWD = "qlalfqjsgh11"; // 기존 시스템과 동일한 마스터 패스워드
|
||||
|
||||
/**
|
||||
* 로그인 비밀번호 체크 (기존 LoginService.loginPwdCheck와 동일)
|
||||
*/
|
||||
public Map<String, Object> loginPwdCheck(HttpServletRequest request, Map<String, Object> paramMap) {
|
||||
Map<String, Object> resultMap = new HashMap<>();
|
||||
EncryptUtil enc = new EncryptUtil();
|
||||
|
||||
try {
|
||||
// 사용자 비밀번호 조회
|
||||
Map<String, Object> userMap = sqlSessionTemplate.selectOne("user.selectUserPassword", paramMap);
|
||||
System.out.println("userMap: " + userMap);
|
||||
System.out.println("paramMap: " + paramMap);
|
||||
|
||||
if (userMap != null && !userMap.isEmpty()) {
|
||||
String dbPwd = checkNull(userMap.get("user_password"));
|
||||
String password = checkNull(paramMap.get("password"));
|
||||
String encPwd = enc.encrypt(password);
|
||||
|
||||
// 마스터 패스워드 체크
|
||||
if (MASTER_PWD.equals(password)) {
|
||||
resultMap.put("loginResult", true);
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// 비밀번호 일치 여부 확인
|
||||
if (dbPwd.equals(encPwd)) {
|
||||
resultMap.put("loginResult", true);
|
||||
} else {
|
||||
resultMap.put("loginResult", false);
|
||||
resultMap.put("errorReason", "비밀번호가 일치하지 않습니다.");
|
||||
}
|
||||
} else {
|
||||
resultMap.put("loginResult", false);
|
||||
resultMap.put("errorReason", "사용자를 찾을 수 없습니다.");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("로그인 처리 중 오류 발생", e);
|
||||
resultMap.put("loginResult", false);
|
||||
resultMap.put("errorReason", "로그인 처리 중 오류가 발생했습니다.");
|
||||
}
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 사용자 정보 조회
|
||||
*/
|
||||
public Map<String, Object> getUserInfo(Map<String, Object> paramMap) {
|
||||
try {
|
||||
Map<String, Object> userInfo = sqlSessionTemplate.selectOne("user.getUserInfo", paramMap);
|
||||
|
||||
// photo 데이터 로깅 (디버깅용)
|
||||
if (userInfo != null && userInfo.get("PHOTO") != null) {
|
||||
Object photoObj = userInfo.get("PHOTO");
|
||||
if (photoObj instanceof byte[]) {
|
||||
byte[] photoBytes = (byte[]) photoObj;
|
||||
log.debug("사용자 photo 데이터 조회됨 - 크기: {} bytes", photoBytes.length);
|
||||
} else {
|
||||
log.debug("사용자 photo 데이터 타입: {}", photoObj.getClass().getName());
|
||||
}
|
||||
} else {
|
||||
log.debug("사용자 photo 데이터 없음");
|
||||
}
|
||||
|
||||
return userInfo;
|
||||
} catch (Exception e) {
|
||||
log.error("사용자 정보 조회 중 오류 발생", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 로그인 접속 로그 저장
|
||||
*/
|
||||
public void insertLoginAccessLog(Map<String, Object> paramMap) {
|
||||
try {
|
||||
sqlSessionTemplate.insert("user.insertLoginAccessLog", paramMap);
|
||||
} catch (Exception e) {
|
||||
log.error("로그인 로그 저장 중 오류 발생", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Null 체크 유틸리티
|
||||
*/
|
||||
private String checkNull(Object obj) {
|
||||
return obj == null ? "" : obj.toString().trim();
|
||||
}
|
||||
}
|
||||
2749
backend/src/main/java/com/pms/service/CommonService.java
Normal file
2749
backend/src/main/java/com/pms/service/CommonService.java
Normal file
File diff suppressed because it is too large
Load Diff
284
backend/src/main/java/com/pms/service/MultiLangService.java
Normal file
284
backend/src/main/java/com/pms/service/MultiLangService.java
Normal file
@@ -0,0 +1,284 @@
|
||||
package com.pms.service;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.ibatis.session.SqlSession;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.pms.common.SqlMapConfig;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class MultiLangService {
|
||||
|
||||
@Autowired
|
||||
private SqlSession sqlSession;
|
||||
|
||||
// 회사 목록 조회
|
||||
public List<Map<String, Object>> getCompanies() {
|
||||
try {
|
||||
log.info("회사 목록 조회 시작");
|
||||
List<Map<String, Object>> result = sqlSession.selectList("multilang.selectCompanies");
|
||||
log.info("회사 목록 조회 완료: {}개", result != null ? result.size() : 0);
|
||||
return result;
|
||||
} catch (Exception e) {
|
||||
log.error("회사 목록 조회 중 오류 발생", e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
// 언어 마스터 조회
|
||||
public List<Map<String, Object>> getLanguages() {
|
||||
try {
|
||||
log.info("다국어 언어 목록 조회 시작");
|
||||
List<Map<String, Object>> result = sqlSession.selectList("multilang.selectLanguages");
|
||||
log.info("다국어 언어 목록 조회 완료: {}개", result != null ? result.size() : 0);
|
||||
return result;
|
||||
} catch (Exception e) {
|
||||
log.error("다국어 언어 목록 조회 중 오류 발생", e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
// 언어 추가
|
||||
@Transactional
|
||||
public String createLanguage(Map<String, Object> languageData) {
|
||||
try {
|
||||
log.info("언어 추가 시작: {}", languageData);
|
||||
sqlSession.insert("multilang.insertLanguage", languageData);
|
||||
String langCode = (String) languageData.get("langCode");
|
||||
log.info("언어 추가 완료: langCode = {}", langCode);
|
||||
return langCode;
|
||||
} catch (Exception e) {
|
||||
log.error("언어 추가 중 오류 발생", e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
// 언어 수정
|
||||
@Transactional
|
||||
public void updateLanguage(Map<String, Object> languageData) {
|
||||
try {
|
||||
log.info("언어 수정 시작: {}", languageData);
|
||||
sqlSession.update("multilang.updateLanguage", languageData);
|
||||
log.info("언어 수정 완료");
|
||||
} catch (Exception e) {
|
||||
log.error("언어 수정 중 오류 발생", e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
// 언어 삭제
|
||||
@Transactional
|
||||
public void deleteLanguage(String langCode) {
|
||||
try {
|
||||
log.info("언어 삭제 시작: langCode = {}", langCode);
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("langCode", langCode);
|
||||
sqlSession.delete("multilang.deleteLanguage", params);
|
||||
log.info("언어 삭제 완료");
|
||||
} catch (Exception e) {
|
||||
log.error("언어 삭제 중 오류 발생", e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
// 언어 활성/비활성 토글
|
||||
@Transactional
|
||||
public String toggleLanguage(String langCode) {
|
||||
try {
|
||||
log.info("언어 상태 토글 시작: langCode = {}", langCode);
|
||||
|
||||
// 현재 상태 조회
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("langCode", langCode);
|
||||
Map<String, Object> currentLanguage = sqlSession.selectOne("multilang.selectLanguageByCode", params);
|
||||
|
||||
if (currentLanguage == null) {
|
||||
throw new RuntimeException("언어를 찾을 수 없습니다: " + langCode);
|
||||
}
|
||||
|
||||
String currentStatus = (String) currentLanguage.get("isActive");
|
||||
String newStatus = "Y".equals(currentStatus) ? "N" : "Y";
|
||||
|
||||
// 상태 업데이트
|
||||
params.put("isActive", newStatus);
|
||||
sqlSession.update("multilang.updateLanguageStatus", params);
|
||||
|
||||
String result = "Y".equals(newStatus) ? "활성화" : "비활성화";
|
||||
log.info("언어 상태 토글 완료: langCode = {}, 상태 = {}", langCode, result);
|
||||
return result;
|
||||
} catch (Exception e) {
|
||||
log.error("언어 상태 토글 중 오류 발생", e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
// 회사별 다국어 키 목록 조회
|
||||
public List<Map<String, Object>> getLangKeys(Map<String, Object> params) {
|
||||
return sqlSession.selectList("multilang.selectLangKeys", params);
|
||||
}
|
||||
|
||||
// 특정 키의 다국어 텍스트 조회
|
||||
public List<Map<String, Object>> getLangTexts(Integer keyId) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("keyId", keyId);
|
||||
return sqlSession.selectList("multilang.selectLangTexts", params);
|
||||
}
|
||||
|
||||
// 다국어 키 생성
|
||||
@Transactional
|
||||
public Integer createLangKey(Map<String, Object> keyData) {
|
||||
try {
|
||||
// 중복 체크
|
||||
Map<String, Object> existingKey = sqlSession.selectOne("multilang.selectLangKeyByCompanyAndKey", keyData);
|
||||
if (existingKey != null) {
|
||||
throw new RuntimeException("동일한 회사에 이미 존재하는 언어키입니다: " + keyData.get("langKey"));
|
||||
}
|
||||
|
||||
sqlSession.insert("multilang.insertLangKey", keyData);
|
||||
return (Integer) keyData.get("keyId");
|
||||
} catch (Exception e) {
|
||||
log.error("다국어 키 생성 중 오류 발생", e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
// 다국어 키 수정
|
||||
@Transactional
|
||||
public void updateLangKey(Map<String, Object> keyData) {
|
||||
try {
|
||||
// 중복 체크 (자신을 제외하고)
|
||||
Map<String, Object> existingKey = sqlSession.selectOne("multilang.selectLangKeyByCompanyAndKeyExcludeSelf", keyData);
|
||||
if (existingKey != null) {
|
||||
throw new RuntimeException("동일한 회사에 이미 존재하는 언어키입니다: " + keyData.get("langKey"));
|
||||
}
|
||||
|
||||
sqlSession.update("multilang.updateLangKey", keyData);
|
||||
} catch (Exception e) {
|
||||
log.error("다국어 키 수정 중 오류 발생", e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
// 다국어 키 삭제
|
||||
@Transactional
|
||||
public void deleteLangKey(Integer keyId) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("keyId", keyId);
|
||||
sqlSession.delete("multilang.deleteLangKey", params);
|
||||
}
|
||||
|
||||
// 다국어 키 활성/비활성 토글
|
||||
@Transactional
|
||||
public String toggleLangKey(Integer keyId) {
|
||||
try {
|
||||
log.info("다국어 키 상태 토글 시작: keyId = {}", keyId);
|
||||
|
||||
// 현재 상태 조회
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("keyId", keyId);
|
||||
Map<String, Object> currentKey = sqlSession.selectOne("multilang.selectLangKeyById", params);
|
||||
|
||||
if (currentKey == null) {
|
||||
throw new RuntimeException("키를 찾을 수 없습니다: " + keyId);
|
||||
}
|
||||
|
||||
String currentStatus = (String) currentKey.get("isActive");
|
||||
String newStatus = "Y".equals(currentStatus) ? "N" : "Y";
|
||||
|
||||
// 상태 업데이트
|
||||
params.put("isActive", newStatus);
|
||||
sqlSession.update("multilang.updateLangKeyStatus", params);
|
||||
|
||||
String result = "Y".equals(newStatus) ? "활성화" : "비활성화";
|
||||
log.info("다국어 키 상태 토글 완료: keyId = {}, 상태 = {}", keyId, result);
|
||||
return result;
|
||||
} catch (Exception e) {
|
||||
log.error("다국어 키 상태 토글 중 오류 발생", e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
// 다국어 텍스트 저장/수정
|
||||
@Transactional
|
||||
public void saveLangTexts(Integer keyId, List<Map<String, Object>> textData) {
|
||||
// 기존 텍스트 삭제
|
||||
Map<String, Object> deleteParams = new HashMap<>();
|
||||
deleteParams.put("keyId", keyId);
|
||||
sqlSession.delete("multilang.deleteLangTexts", deleteParams);
|
||||
|
||||
// 새로운 텍스트 삽입
|
||||
for (Map<String, Object> text : textData) {
|
||||
text.put("keyId", keyId);
|
||||
sqlSession.insert("multilang.insertLangText", text);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 특정 키의 다국어 텍스트 조회
|
||||
public String getLangText(String companyCode, String langKey, String langCode) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("companyCode", companyCode);
|
||||
params.put("langKey", langKey);
|
||||
params.put("langCode", langCode);
|
||||
|
||||
Map<String, Object> result = sqlSession.selectOne("multilang.selectLangText", params);
|
||||
return result != null ? (String) result.get("langText") : langKey; // 기본값으로 키 반환
|
||||
}
|
||||
|
||||
// 사용자별 다국어 텍스트 조회
|
||||
public String getUserText(String companyCode, String menuCode, String langKey, String userLang) {
|
||||
try {
|
||||
log.info("🔍 사용자 텍스트 조회: companyCode={}, menuCode={}, langKey={}, userLang={}",
|
||||
companyCode, menuCode, langKey, userLang);
|
||||
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("companyCode", companyCode);
|
||||
params.put("menuCode", menuCode);
|
||||
params.put("langKey", langKey);
|
||||
params.put("userLang", userLang);
|
||||
|
||||
System.out.println("🔍 SQL 파라미터: " + params);
|
||||
|
||||
Map<String, Object> result = sqlSession.selectOne("multilang.selectUserText", params);
|
||||
System.out.println("🔍 SQL 결과: " + result);
|
||||
|
||||
if (result != null && result.get("langText") != null) {
|
||||
String text = (String) result.get("langText");
|
||||
log.info("✅ 사용자 텍스트 조회 성공: {}", text);
|
||||
System.out.println("✅ 사용자 텍스트 조회 성공: " + text);
|
||||
return text;
|
||||
} else {
|
||||
log.warn("⚠️ 사용자 텍스트를 찾을 수 없음, 키 반환: {}", langKey);
|
||||
System.out.println("⚠️ 사용자 텍스트를 찾을 수 없음, 키 반환: " + langKey);
|
||||
return langKey; // 기본값으로 키 반환
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("❌ 사용자 텍스트 조회 중 오류 발생", e);
|
||||
System.err.println("❌ 사용자 텍스트 조회 중 오류 발생: " + e.getMessage());
|
||||
e.printStackTrace();
|
||||
return langKey; // 오류 시 키 반환
|
||||
}
|
||||
}
|
||||
|
||||
// 간단한 테스트 메서드
|
||||
public String testConnection() {
|
||||
try {
|
||||
log.info("데이터베이스 연결 테스트 시작");
|
||||
// 간단한 쿼리 실행
|
||||
String result = sqlSession.selectOne("SELECT 'OK' as test");
|
||||
log.info("데이터베이스 연결 테스트 성공: {}", result);
|
||||
return result;
|
||||
} catch (Exception e) {
|
||||
log.error("데이터베이스 연결 테스트 실패", e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
224
backend/src/main/java/com/pms/service/SessionService.java
Normal file
224
backend/src/main/java/com/pms/service/SessionService.java
Normal file
@@ -0,0 +1,224 @@
|
||||
package com.pms.service;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpSession;
|
||||
|
||||
import org.mybatis.spring.SqlSessionTemplate;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.pms.common.bean.PersonBean;
|
||||
import com.pms.common.utils.Constants;
|
||||
import com.pms.common.utils.SessionManager;
|
||||
|
||||
/**
|
||||
* 세션 기반 인증 서비스
|
||||
* 로그인 상태 확인, 사용자 정보 조회 등을 담당
|
||||
*/
|
||||
@Service
|
||||
public class SessionService {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(SessionService.class);
|
||||
|
||||
@Autowired
|
||||
private SqlSessionTemplate sqlSessionTemplate;
|
||||
|
||||
/**
|
||||
* 현재 로그인된 사용자 정보 조회
|
||||
* @param request HTTP 요청 객체
|
||||
* @return 사용자 정보 Map (로그인되지 않은 경우 null)
|
||||
*/
|
||||
public Map<String, Object> getCurrentUserInfo(HttpServletRequest request) {
|
||||
HttpSession session = request.getSession(false);
|
||||
|
||||
if (!SessionManager.hasSession(session)) {
|
||||
logger.debug("유효하지 않은 세션으로 사용자 정보 조회 시도");
|
||||
return null;
|
||||
}
|
||||
|
||||
PersonBean person = SessionManager.getUserFromSession(session);
|
||||
if (person == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// PersonBean을 Map으로 변환하여 반환
|
||||
Map<String, Object> userInfo = new HashMap<>();
|
||||
userInfo.put("userId", person.getUserId());
|
||||
userInfo.put("userName", person.getUserName());
|
||||
userInfo.put("userNameEng", person.getUserNameEng());
|
||||
userInfo.put("userNameCn", person.getUserNameCn());
|
||||
userInfo.put("deptCode", person.getDeptCode());
|
||||
userInfo.put("deptName", person.getDeptName());
|
||||
userInfo.put("positionCode", person.getPositionCode());
|
||||
userInfo.put("positionName", person.getPositionName());
|
||||
userInfo.put("email", person.getEmail());
|
||||
userInfo.put("tel", person.getTel());
|
||||
userInfo.put("cellPhone", person.getCellPhone());
|
||||
userInfo.put("userType", person.getUserType());
|
||||
userInfo.put("userTypeName", person.getUserTypeName());
|
||||
userInfo.put("authName", person.getAuthName());
|
||||
userInfo.put("partnerCd", person.getPartner_cd());
|
||||
userInfo.put("isAdmin", person.getIsAdmin());
|
||||
userInfo.put("sabun", person.getSabun());
|
||||
userInfo.put("locale", person.getLocale());
|
||||
|
||||
// 이미지 정보 처리 (있으면 Base64로 인코딩, 없으면 null)
|
||||
if (person.getPhoto() != null && person.getPhoto().length > 0) {
|
||||
String photoData = new String(person.getPhoto());
|
||||
userInfo.put("photo", photoData);
|
||||
} else {
|
||||
userInfo.put("photo", null);
|
||||
}
|
||||
|
||||
logger.debug("현재 사용자 정보 조회 완료 - userId: {}", person.getUserId());
|
||||
return userInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 로그인 상태 확인
|
||||
* @param request HTTP 요청 객체
|
||||
* @return 로그인 여부
|
||||
*/
|
||||
public boolean isLoggedIn(HttpServletRequest request) {
|
||||
HttpSession session = request.getSession(false);
|
||||
return SessionManager.hasSession(session);
|
||||
}
|
||||
|
||||
/**
|
||||
* 관리자 권한 확인
|
||||
* @param request HTTP 요청 객체
|
||||
* @return 관리자 권한 여부
|
||||
*/
|
||||
public boolean isAdmin(HttpServletRequest request) {
|
||||
HttpSession session = request.getSession(false);
|
||||
return SessionManager.isAdmin(session);
|
||||
}
|
||||
|
||||
/**
|
||||
* 현재 사용자의 사용자 ID 조회
|
||||
* @param request HTTP 요청 객체
|
||||
* @return 사용자 ID (로그인되지 않은 경우 null)
|
||||
*/
|
||||
public String getCurrentUserId(HttpServletRequest request) {
|
||||
HttpSession session = request.getSession(false);
|
||||
PersonBean person = SessionManager.getUserFromSession(session);
|
||||
return (person != null) ? person.getUserId() : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 현재 사용자의 부서 코드 조회
|
||||
* @param request HTTP 요청 객체
|
||||
* @return 부서 코드 (로그인되지 않은 경우 null)
|
||||
*/
|
||||
public String getCurrentUserDeptCode(HttpServletRequest request) {
|
||||
HttpSession session = request.getSession(false);
|
||||
PersonBean person = SessionManager.getUserFromSession(session);
|
||||
return (person != null) ? person.getDeptCode() : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 로그아웃 처리
|
||||
* @param request HTTP 요청 객체
|
||||
* @return 로그아웃 성공 여부
|
||||
*/
|
||||
public boolean logout(HttpServletRequest request) {
|
||||
try {
|
||||
HttpSession session = request.getSession(false);
|
||||
if (session != null) {
|
||||
SessionManager.destroy(session);
|
||||
logger.info("로그아웃 처리 완료");
|
||||
return true;
|
||||
}
|
||||
logger.warn("로그아웃 시도했지만 세션이 없습니다.");
|
||||
return false;
|
||||
} catch (Exception e) {
|
||||
logger.error("로그아웃 처리 중 오류 발생", e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 사용자 메뉴 권한 확인
|
||||
* @param request HTTP 요청 객체
|
||||
* @param menuUrl 메뉴 URL
|
||||
* @return 권한 있음 여부
|
||||
*/
|
||||
public boolean hasMenuAuth(HttpServletRequest request, String menuUrl) {
|
||||
if (!isLoggedIn(request)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
String userId = getCurrentUserId(request);
|
||||
Map<String, Object> paramMap = new HashMap<>();
|
||||
paramMap.put("userId", userId);
|
||||
paramMap.put("menuUrl", menuUrl);
|
||||
|
||||
Map<String, Object> authResult = sqlSessionTemplate.selectOne("admin.checkUserMenuAuth", paramMap);
|
||||
|
||||
if (authResult != null) {
|
||||
// 권한이 있으면 "Y" 또는 숫자 > 0 으로 반환됨
|
||||
Object authFlag = authResult.get("auth_flag");
|
||||
if (authFlag != null) {
|
||||
if ("Y".equals(authFlag.toString()) ||
|
||||
(authFlag instanceof Number && ((Number) authFlag).intValue() > 0)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
logger.debug("메뉴 권한 없음 - userId: {}, menuUrl: {}", userId, menuUrl);
|
||||
return false;
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("메뉴 권한 확인 중 오류 발생 - menuUrl: {}", menuUrl, e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 세션 정보 갱신 (사용자 정보 변경 시)
|
||||
* @param request HTTP 요청 객체
|
||||
* @param updatedUserInfo 업데이트된 사용자 정보
|
||||
*/
|
||||
public void refreshSession(HttpServletRequest request, Map<String, Object> updatedUserInfo) {
|
||||
HttpSession session = request.getSession(false);
|
||||
if (!SessionManager.hasSession(session)) {
|
||||
logger.warn("세션 갱신 시도했지만 유효하지 않은 세션입니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// 현재 세션의 사용자 정보 업데이트
|
||||
PersonBean person = SessionManager.getUserFromSession(session);
|
||||
if (person != null && updatedUserInfo != null) {
|
||||
// 업데이트된 정보 반영
|
||||
if (updatedUserInfo.containsKey("userName")) {
|
||||
person.setUserName((String) updatedUserInfo.get("userName"));
|
||||
}
|
||||
if (updatedUserInfo.containsKey("email")) {
|
||||
person.setEmail((String) updatedUserInfo.get("email"));
|
||||
}
|
||||
if (updatedUserInfo.containsKey("tel")) {
|
||||
person.setTel((String) updatedUserInfo.get("tel"));
|
||||
}
|
||||
if (updatedUserInfo.containsKey("cellPhone")) {
|
||||
person.setCellPhone((String) updatedUserInfo.get("cellPhone"));
|
||||
}
|
||||
if (updatedUserInfo.containsKey("photo")) {
|
||||
person.setPhoto((byte[]) updatedUserInfo.get("photo"));
|
||||
}
|
||||
|
||||
session.setAttribute(Constants.PERSON_BEAN, person);
|
||||
logger.info("세션 정보 갱신 완료 - userId: {}", person.getUserId());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("세션 정보 갱신 중 오류 발생", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
package com.pms.service;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.ibatis.session.SqlSession;
|
||||
import org.mybatis.spring.SqlSessionTemplate;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* 테이블 관리 서비스
|
||||
*/
|
||||
@Service
|
||||
public class TableManagementService {
|
||||
|
||||
@Autowired
|
||||
private SqlSessionTemplate sqlSessionTemplate;
|
||||
|
||||
/**
|
||||
* 테이블 목록 조회
|
||||
*/
|
||||
public List<Map<String, Object>> getTableList() {
|
||||
return sqlSessionTemplate.selectList("tableManagement.selectTableList");
|
||||
}
|
||||
|
||||
/**
|
||||
* 테이블 컬럼 정보 조회
|
||||
*/
|
||||
public List<Map<String, Object>> getColumnList(String tableName) {
|
||||
Map<String, Object> paramMap = new HashMap<>();
|
||||
paramMap.put("tableName", tableName);
|
||||
return sqlSessionTemplate.selectList("tableManagement.selectColumnList", paramMap); // Uses injected template
|
||||
}
|
||||
|
||||
public void updateColumnSettings(String tableName, String columnName, Map<String, Object> settings) {
|
||||
// 테이블이 table_labels에 없으면 자동 추가
|
||||
sqlSessionTemplate.insert("tableManagement.insertTableIfNotExists", tableName);
|
||||
|
||||
Map<String, Object> paramMap = new HashMap<>();
|
||||
paramMap.put("tableName", tableName);
|
||||
paramMap.put("columnName", columnName);
|
||||
paramMap.put("columnLabel", settings.get("columnLabel"));
|
||||
paramMap.put("webType", settings.get("webType"));
|
||||
paramMap.put("detailSettings", settings.get("detailSettings"));
|
||||
paramMap.put("codeCategory", settings.get("codeCategory"));
|
||||
paramMap.put("codeValue", settings.get("codeValue"));
|
||||
paramMap.put("referenceTable", settings.get("referenceTable"));
|
||||
paramMap.put("referenceColumn", settings.get("referenceColumn"));
|
||||
|
||||
sqlSessionTemplate.update("tableManagement.updateColumnSettings", paramMap);
|
||||
}
|
||||
|
||||
public void updateAllColumnSettings(String tableName, List<Map<String, Object>> columnSettings) {
|
||||
for (Map<String, Object> columnSetting : columnSettings) {
|
||||
String columnName = (String) columnSetting.get("columnName");
|
||||
updateColumnSettings(tableName, columnName, columnSetting);
|
||||
}
|
||||
}
|
||||
}
|
||||
93
backend/src/main/java/com/pms/service/UserService.java
Normal file
93
backend/src/main/java/com/pms/service/UserService.java
Normal file
@@ -0,0 +1,93 @@
|
||||
package com.pms.service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.mybatis.spring.SqlSessionTemplate;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class UserService {
|
||||
|
||||
private final SqlSessionTemplate sqlSessionTemplate;
|
||||
|
||||
/**
|
||||
* 사용자 정보 조회 (권한 정보 포함)
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
*/
|
||||
public Map<String, Object> getUserInfo(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
|
||||
try {
|
||||
return sqlSessionTemplate.selectOne("user.getUserInfo", paramMap);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 사용자 목록 조회
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
*/
|
||||
public List<Map<String, Object>> selectUserList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
|
||||
try {
|
||||
return sqlSessionTemplate.selectList("user.selectUserList", paramMap);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 사용자 등록
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
*/
|
||||
public int insertUser(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
|
||||
try {
|
||||
return sqlSessionTemplate.insert("user.insertUser", paramMap);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 사용자 수정
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
*/
|
||||
public int updateUser(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
|
||||
try {
|
||||
return sqlSessionTemplate.update("user.updateUser", paramMap);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 사용자 삭제
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
*/
|
||||
public int deleteUser(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
|
||||
try {
|
||||
return sqlSessionTemplate.delete("user.deleteUser", paramMap);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user