본문 바로가기
  • 평범한 나의 개발공부 일지
나의 개발 기록/Java /Spring

[Vue.js / spring boot] http header에 저장된 cookie 서버로 가져와보기

by 블랑 블랑 2022. 8. 15.
반응형

먼저,

클라이언트에서 id와pw를 서버에 전달하여 서버는 해당정보로 존재하는 사용자인지 검증한 뒤 

sessionID(랜덤한 값)을 생성하여 서버의 세션저장소에 sessionID를 저장했다

그리고 sessionID를 클라이언트로 다시 전달할때 http헤더의 쿠키에 담아 전달 하였다

 

그결과 ! ▼

페이지가 이동되어도 지워지지않고 그대로 저장되어있는 쿠키

 

 

이제 

쿠키에 담긴 sessionID를 이용하여

페이지가 이동될때마다 서버로 sessionID를 전달하려고한다

 

mounted() 를 사용해서

해당 페이지가 로드되면 실행되도록 했다!

 

 

component

this.$store.dispatch('loginStore/keepLogin')
        .then(() => {
          if(this.$store.state.loginStore.loginYN){
            console.log("로그인유지");
          }else{
            console.log("로그인유지실패");
          }
        })
        .catch(() => {
          console.log("로그인유지로직오류");
        })

 

 

loginStore/keepLogin (store)

    keepLogin( {commit} ){
      console.log("keepLogin!!!!!!");
      return axios.post('/api/keepLogin')
      .then(response => {
        console.log(response.data);
        if(response.data == "유지성공"){
          commit('change');
        }

      })
    }

이때 commit은 클라이언트에 있는 sessionid와 서버에 저장되어있는 sessionID가 일치하는지 확인하는 로직이고

성공시

state에 있는 로그인여부 판단하는 변수에 true값을 줘서

true면 로그인유지, false면 로그인유지가 안되도록 하려고 한다 (이게,,바로,,, 세션유지 (?) )

 

 

 

backend 

	@RequestMapping(value = "/keepLogin", method = {RequestMethod.POST})
	public String keepLogin(HttpServletRequest request, HttpSession session) {
		System.out.println("keepLogin 컨트롤러 접근");
		String result = "";
		Cookie[] cookkkk = request.getCookies();
		String cookie = null;
		
		for(Cookie c : cookkkk) {
			if(c.getName().equals("sessionIdCookie")) {
				cookie = c.getValue();
			}
		}
		
		System.out.println("1. 쿠키값 : " + cookie);
		System.out.println("2. 세션값 : " + session.getAttribute("sessionId"));
		
		if(cookie == session.getAttribute("sessionId")){
			result = "유지성공";
		}else {
			result = "유지실패";
		}
		return result;
	}

 

중요한건 백단에서

 

잘 찍혀 나오는데... 그렇다는건 클라이언트에서 잘 호출했다는 건데 (?)

 

 

404에러가 난다 ㅇ0ㅇ............................ 여기서부터는 해결후 ㅠ 추후 수정......!

 

 

 

 

 

+ 해결

백단에서 @ResponseBody 어노테이션이 빠져서 그렇다..!

@ResponseBody 이란? 비동기 통신을 위해서는 body에 담아서 보내야한다 그래서 응답을 해줘야 하니까 응답해줄 요청메세지를 body에 보내줘야하는데 이때 작성해주어야하는 어노테이션이 responseBody!

요걸 빼먹어서.........그렇다....  추가해주니 바로 에러 해결 완료 

	@RequestMapping(value = "/keepLogin", method = {RequestMethod.POST})
    @ResponseBody
	public String keepLogin(HttpServletRequest request, HttpSession session) {
		System.out.println("keepLogin 컨트롤러 접근");
		String result = "";
		Cookie[] cookkkk = request.getCookies();
		String cookie = null;
		
		for(Cookie c : cookkkk) {
			if(c.getName().equals("sessionIdCookie")) {
				cookie = c.getValue();
			}
		}
		
		System.out.println("1. 쿠키값 : " + cookie);
		System.out.println("2. 세션값 : " + session.getAttribute("sessionId"));
		
		if(cookie == session.getAttribute("sessionId")){
			result = "유지성공";
		}else {
			result = "유지실패";
		}
		return result;
	}

 

반응형

댓글