
File name
Commit message
Commit date
File name
Commit message
Commit date
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.token.web;
import com.takensoft.cms.token.service.RefreshTokenService;
import com.takensoft.common.message.MessageCode;
import com.takensoft.common.util.ResponseData;
import com.takensoft.common.util.ResponseUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.nio.charset.Charset;
/**
* @author takensoft
* @since 2024.04.01
* @modification
* since | author | description
* 2024.04.01 | takensoft | 최초 등록
*
* RefreshToken 정보 관련 컨트롤러
*/
@RestController
@RequiredArgsConstructor
@Slf4j
public class RefreshTokenController {
private final ResponseUtil resUtil;
private final RefreshTokenService refreshTokenService;
/**
* @param req - HTTP 요청 객체
* @param res - HTTP 응답 객체
* @return ResponseEntity - 로그아웃 응답 결과
*
* 로그아웃
*/
@PostMapping(value = "/mbr/logout.json")
public ResponseEntity<?> logout(HttpServletRequest req, HttpServletResponse res){
int result = refreshTokenService.deleteByRefresh(req, res);
if(result > 0) {
Cookie cookie = new Cookie("refresh", null);
cookie.setMaxAge(0); // 생명주기
//cookie.setSecure(true); // https 통신을 할 경우 true로 사용
cookie.setPath("/"); // 쿠키 적용 범위
cookie.setHttpOnly(true);
res.addCookie(cookie);
return resUtil.successRes(result, MessageCode.LOGOUT_SUCCESS);
} else {
return resUtil.errorRes(MessageCode.COMMON_UNKNOWN_ERROR);
}
}
/**
* @param req - HTTP 요청 객체
* @param res - HTTP 응답 객체
* @return ResponseEntity - 토큰 재발급 응답 결과
*
* 토큰 재발급
*/
@PostMapping("/refresh/tokenReissue.json")
public ResponseEntity<?> tokenReissue(HttpServletRequest req, HttpServletResponse res) {
int result = refreshTokenService.tokenReissueProc(req, res);
// 응답 처리
HttpHeaders headers = new HttpHeaders();
headers.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));
ResponseData responseData = new ResponseData();
if(result > 0) {
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
} else {
responseData.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
responseData.setStatusText(HttpStatus.INTERNAL_SERVER_ERROR);
responseData.setMessage("로그인을 다시해주시기 바랍니다.");
return new ResponseEntity<>(responseData, headers, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}