
File name
Commit message
Commit date
File name
Commit message
Commit date
04-22
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
package com.takensoft.cms.loginPolicy.web;
import com.takensoft.cms.loginPolicy.service.LoginModeService;
import com.takensoft.cms.loginPolicy.service.LoginPolicyService;
import com.takensoft.cms.loginPolicy.vo.LoginModeVO;
import com.takensoft.cms.loginPolicy.vo.LoginPolicyVO;
import com.takensoft.cms.token.service.RefreshTokenService;
import com.takensoft.common.message.MessageCode;
import com.takensoft.common.util.JWTUtil;
import com.takensoft.common.util.ResponseUtil;
import com.takensoft.common.util.SessionUtil;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.Set;
/**
* @author 김혜민
* @since 2025.03.22
* @modification
* since | author | description
* 2025.03.22 | 김혜민 | 최초 등록
*
* 로그인정책 관련 컨트롤러
*/
@RestController
@RequiredArgsConstructor
@Slf4j
@RequestMapping(value = "/admin/loginPolicy")
public class LoginPolicyController {
private final LoginPolicyService loginPolicyService;
private final LoginModeService loginModeService;
private final ResponseUtil resUtil;
private final JWTUtil jwtUtil;
private final SessionUtil sessionUtil;
private final RedisTemplate<String, String> redisTemplate;
private final RefreshTokenService refreshTokenService;
/**
*
* @return ResponseEntity - 중복로그인 조회 결과를 포함하는 응답
*
* 중복로그인 조회
*/
@PostMapping(value ="/getLoginPolicy.json")
public ResponseEntity<?> getLoginPolicy() {
Boolean result = loginPolicyService.getPolicy();
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
}
/**
* @param loginPolicyVO - 중복로그인 정보
* @return ResponseEntity - 중복로그인 결과를 포함하는 응답
*
* 중복로그인 수정
*/
@PostMapping(value ="/saveLoginPolicy.json")
public ResponseEntity<?> saveLoginPolicy(@RequestBody LoginPolicyVO loginPolicyVO, HttpServletRequest request) {
try {
String token = request.getHeader("Authorization");
String mbrId = (String) jwtUtil.getClaim(token, "mbrId");
if (mbrId == null || mbrId.isBlank()) {
return resUtil.errorRes(MessageCode.COMMON_BAD_REQUEST);
}
loginPolicyVO.setRgtr(mbrId);
int result = loginPolicyService.insertPolicy(loginPolicyVO);
if (result > 0) {
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
} else {
return resUtil.errorRes(MessageCode.COMMON_INSERT_FAIL); // 저장 실패
}
} catch (DuplicateKeyException e) {
return resUtil.errorRes(MessageCode.COMMON_DUPLICATION_DATA); // 중복 저장
} catch (Exception e) {
return resUtil.errorRes(MessageCode.COMMON_UNKNOWN_ERROR); // 기타 예외
}
}
/**
*
* @return ResponseEntity - 로그인 방식 조회 결과를 포함하는 응답
*
* 로그인 방식 조회
*/
@PostMapping(value ="/getLoginMode.json")
public Object getLoginMode() {
// String loginMode = loginModeService.getLoginMode();
String loginMode = "S";
return resUtil.successRes(loginMode, MessageCode.COMMON_SUCCESS);
}
/**
*
* @return ResponseEntity - 로그인 방식 저장 결과를 포함하는 응답
*
* 로그인 방식 저장
*/
@PostMapping(value ="/saveLoginMode.json")
public ResponseEntity<?> saveLoginMode(@RequestBody LoginModeVO loginModeVO, HttpServletRequest request) {
try {
String token = request.getHeader("Authorization");
String mbrId = (String) jwtUtil.getClaim(token, "mbrId");
if (mbrId == null || mbrId.isBlank()) {
return resUtil.errorRes(MessageCode.COMMON_BAD_REQUEST);
}
loginModeVO.setRgtr(mbrId);
int result = loginModeService.insertLoginMode(loginModeVO);
if (loginModeVO.getLgnMode().equals("J")) {
// JWT 전체 로그아웃
Set<String> keys = redisTemplate.keys("jwt:*");
if (keys != null && !keys.isEmpty()) redisTemplate.delete(keys);
refreshTokenService.deleteAll();
} else {
// 세션 전체 로그아웃
sessionUtil.invalidateAllSessions();
}
if (result > 0) {
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
} else {
return resUtil.errorRes(MessageCode.COMMON_INSERT_FAIL); // 저장 실패
}
} catch (DuplicateKeyException e) {
return resUtil.errorRes(MessageCode.COMMON_DUPLICATION_DATA); // 중복 저장
} catch (Exception e) {
return resUtil.errorRes(MessageCode.COMMON_UNKNOWN_ERROR); // 기타 예외
}
}
}