[JAVA] session 다루기

jihun Choi·2023년 8월 26일
0
post-thumbnail

안녕하세요 오늘은 session으로 회원 정보를 다뤄보도록 하겠습니다

😎 세션(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();
    }
}

  • login : 로그인 할때 session에 user정보를 넣는 메소드
  • isLogin : 로그인 여부를 확인해주는 메소드
  • getUser : 현재 로그인 되어있는 user 정보를 반환
  • logout : 현재 세션을 제거해주는 메소드

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);
    }
}
  • main : isLogin 메소드를 통해 로그인 여부를 확인하고 로그인이 안되있을 경우 로그인폼으로 이동시킴
  • login : 화면단에서 로그인 데이터를 받아 DB에서 회원 정보를 체크한뒤 회원 정보가 존재할경우 sessionutil.login 메소드로 user정보를 session에 넣어줌
  • logout : logout을 시켜주는 서비스

위와 같이 로직 구현 후 실행결과 정상 동작하는 것을 확인할수 있었습니다 다음번엔 더 신선한 소재로 찾아뵙겠습니다 감사합니다

profile
성장을 위해 열심히 노력하는 개발자 입니다

0개의 댓글