[Spring] 로그아웃과 회원가입

[Spring] 로그아웃과 회원가입

◇로그아웃

로그아웃은 따로 페이지가 필요 없기때문에 바로 컨트롤러부터 시작하면 된다.

로그아웃 하고나면 ROOT로 가야함 = jsp를 넘겨야한다. => 경로로 가라는 건 리턴타입이 String!

//로그아웃 @RequestMapping(value="/user/loginOut", method=RequestMethod.GET) public String loginOut(HttpServletRequest request, HttpServletResponse response) { if(CookieUtil.getCookie(request, AUTH_COOKIE_NAME) != null) { CookieUtil.deleteCookie(request, response, "/", AUTH_COOKIE_NAME); } return "redirect:/"; }

쿠키에 값이 있을때(null이 아닐때)는 쿠키 값을 날려야하므로 먼저 쿠키아이디에 대한 정의부터 해야한다.

***CookieUtil.deleteCookie(request, response, "/", AUTH_COOKIE_NAME);

: 받아온 쿠키를 날릴건데 "/"는 시작점(루트 경로부터) AUTH_COOKIE_NAME 얘에 대해서! (결국 AUTH_COOKIE_NAME만 날린다는 뜻)

쿠키값은 env.xml에 가면 아래처럼 auth.cookie.name의 USER_ID로 정의가 되어있다.

return "redirect:/"는 문법인데 redirect: 뒤의 경로로 보내라~ 이런 뜻이다.

////userController.java : env에 auth.cookie.name를 찾아! // 쿠키명 @Value("#{env['auth.cookie.name']}") private String AUTH_COOKIE_NAME; ////root-context.xml: env는 아래 위치에 있다. ////env.xml : auth.cookie.name라는 키로 되어있는 USER_ID을 받아! USER_ID

◇회원가입

로그인 회원가입

회원가입은 navigation.jsp에 가면 위 내용처럼 html코드가 짜여있다. 이 중 회원가입의 url인 /user/regForm만 가지고 컨트롤러로 가서 컨트롤러부터 구현하면 된다.

//회원가입 폼 @RequestMapping(value="/user/regForm", method=RequestMethod.GET) public String regForm(HttpServletRequest request, HttpServletResponse response) { String cookieUserId = CookieUtil.getHexValue(request, AUTH_COOKIE_NAME); if(StringUtil.isEmpty(cookieUserId)) //쿠키 아이디가 없다 { return "/user/regForm"; } else { CookieUtil.deleteCookie(request, response, AUTH_COOKIE_NAME); return "redirect:/"; } }

해당 url을 맵핑시켜주고, 마찬가지로 jsp를 넘겨야 하기때문에 String타입으로 하면 된다. 매개변수로는 request와 response 두개를 받는다. 먼저 쿠키값을 받아온 다음 쿠키아이디가 없으면 회원가입 페이지(/user/regForm)를 리턴해주고, 쿠키값이 있다면 쿠키를 삭제한 후 인덱스 페이지로 보내도록 컨트롤러를 구현한다.

이제 regForm.jsp를 만들어서 회원가입 창이 뜨는지 확인을 해야할 차례이다. 이 화면도 html소스는 교수님에게 전달받고 우리는 script의 ajax부분을 함께 구현하며 수업을 진행했다.(제이쿼리는 그동안 여러번 했기때문에 이번에는 생략하도록 했다) 아래는 스크립트 중에서도 우리가 함께한 ajax 부분만,, (전문은 너무 길기때문에)

$(document).ready(function() { $("#btnReg").on("click", function() { //ajax $.ajax({ type: "POST", url: "/user/idCheck", data:{ userId: $("#userId").val() //userId에 $("#userId").val()값을 넘기자 }, datatype: "JSON", beforeSend: function(xhr){ xhr.setRequestHeader("AJAX", "true"); //리퀘스트 헤더에 나 ajax통신이라고 미리 셋팅하겠다는 거임 }, success: function(response){ if(response.code == 0) { fn_userReg(); //////아직 구현하지 않음 } else if(response.code == 100) { alert("중복된 아이디입니다."); $("#userId").focus(); } else if(response.code == 400) { alert("파라미터값이 잘못되었습니다."); $("#userId").focus(); } else { alert("오류가 발생했습니다."); $("#userId").focus(); } }, complete: function(data) { icia.common.log(data); //이건 잘 하는건 아니지만 디버깅용으로 로그에 데이타 찍기 }, error: function(xhr, status, error) { icia.common.error(error); } }); }); }); //위에 ajax성공시 실행될 함수 function fn_userReg() { //ajax }

내용이 매우 길기때문에 먼저 진행한 중복아이디 체크 부분만 먼저 ajax를 구현했고, 성공시 response.code가 0인 경우 실행될 fn_userReg()함수는 다음 글에서 이어 하고자 한다. (내용이 너무 길기 때문에 !)

regForm.jsp의 script에서 ajax를 구현했으면 컨트롤러로 가서 해당하는 내용을 맵핑시켜줘야 한다.

//중복 아이디 체크 @RequestMapping(value="/user/idCheck", method=RequestMethod.POST) @ResponseBody //리프레시하지 않고 내거 메소드에서 바로 리턴할게 ! public Response idCheck(HttpServletRequest request, HttpServletResponse response) { String userId = HttpUtil.get(request, "userId"); Response ajaxResponse = new Response(); if(!StringUtil.isEmpty(userId)) //매개변수로 넘어왔니 ? { if(userService.userSelect(userId) == null) // 아이디가없다. 유저객체가 null이다= 리턴타입이 있다. = 객체가 생성되지않았다 ? 데이터가 없다 { ajaxResponse.setResponse(0, "Success"); } else { ajaxResponse.setResponse(100, "Duplicate ID"); } } else { ajaxResponse.setResponse(400, "Bad Request"); } return ajaxResponse; }

컨트롤러에서 적은 숫자코드랑 ajax에 있는 코드랑 잘 맞춰서 해야 오류가 나지 않는다 .

@ResponseBody가 어떨때 쓰는 건지에 대해서 아직도 확실히 이해하지 못한것 같다. 하지만 ajax통신으로 보낸 애들을 받아야 하는 경우에 써줘야 하는 어노테이션이라고 받아들이고 진행하고 있다. 실제로 ajax통신의 경우 매번 @ResponseBody로 받고 있다,,, 봐도 봐도 쉬운구석이 하나도 없다

from http://bbizzang.tistory.com/24 by ccl(A) rewrite - 2021-12-18 15:27:26