안녕하세요 오늘은 session으로 회원 정보를 다뤄보도록 하겠습니다
세션(session)이란 웹 사이트의 여러 페이지에 걸쳐 사용되는 사용자 정보를 저장하는 방법을 의미합니다.
사용자가 브라우저를 닫아 서버와의 연결을 끝내는 시점까지를 세션이라고 합니다.
자바에서는 HttpServletRequest에 있는 HttpSession을 통해 session을 컨트롤 할수 있습니다
HttpSession을 통해 간단한 로그인 기능을 구현해 보겠습니다
먼저 로그인여부, 로그인, 로그아웃을 구현하는 util을 구현해 보겠습니다
SessionUtil.java
package com.example.sessionEx.util;
import com.example.sessionEx.vo.UserVO;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
public class SessionUtil {
//로그인
public static void login(HttpServletRequest v1, UserVO userVo){
HttpSession session = v1.getSession(true);
synchronized (session){
session.setAttribute("user", userVo);
}
}
//로그인 여부 확인
// return boolean
public static boolean isLogin(HttpServletRequest v1){
HttpSession session = v1.getSession(true);
return session.getAttribute("user") != null ? true : false;
}
//세션에 있는 user정보를 반환
public static UserVO getUser(HttpServletRequest v1){
HttpSession session = v1.getSession(true);
return (UserVO)session.getAttribute("user");
}
//로그아웃
public static void logout(HttpServletRequest v1){
HttpSession session = v1.getSession(true);
session.invalidate();
}
}
loginController.java
@Controller
@RequiredArgsConstructor
public class LoginController {
private final LoginService LoginService;
//메인
@GetMapping("/")
public String main(HttpServletRequest request){
if(!SessionUtil.isLogin(request)){
return "redirect:./loginReg";
}
UserVO userVO = SessionUtil.getUser(request);
request.setAttribute("user", userVO);
return "main";
}
//로그인 폼 페이지
@GetMapping("/loginReg")
public String loginRegForm(HttpServletRequest request){
if(SessionUtil.isLogin(request)){
return "redirect:/";
}
return "loginRegForm";
}
//로그인(서비스)
@PostMapping("/login")
public ResponseEntity<LoginEntity> login(HttpServletRequest request, @RequestBody UserVO userVO){
LoginEntity loginEntity = new LoginEntity();
UserVO user = mainService.getUser(userVO);
if(user != null && user.getId() != "") {
SessionUtil.login(request, user);
loginEntity.setCode(200);
return new ResponseEntity<>(loginEntity, HttpStatus.OK);
}else{
loginEntity.setCode(401);
return new ResponseEntity<>(loginEntity, HttpStatus.OK);
}
}
//로그아웃(서비스)
@PostMapping("/logout")
public void logout(HttpServletRequest request){
SessionUtil.logout(request);
}
}
위와 같이 로직 구현 후 실행결과 정상 동작하는 것을 확인할수 있었습니다 다음번엔 더 신선한 소재로 찾아뵙겠습니다 감사합니다