Selenium 으로 네이버 로그인 하기
이제는 현실 사용자의 정보를 사용해 로그인 기능을 구현해 보자.저희들이 해야만 되는 일은 DB에 저장된 정보와 로그인을 위해 입력한 정보를 비교하기 위한 Service 클래스를 생성하고, Controller와 DAO 사이에서 둘을 적절하게 연결시켜 주는 것입니다. 확인을 편하게 하기 위해 기본적으로 들어가 있는 더미 데이터도 저장해 주자. 이제, 우리는 입력된 아이디와 비밀번호를 사용해 유저 정보를 조회해야 합니다. 조금 더 추상화 해, 파라미터들을 전달해 주면 해당 파라미터들을 사용해 데이터를 조회하는 기능을 DAO에 추가해 주자.가장 먼저, 인터페이스에 메서드를 하나 추가해 줍니다.
세션 적용하기로그인
세션 생성 sessionId 생성, 세션 저장소에 sessionId와 보관할 값 저장, 응답 쿠키 생성해서 전달 세션 조회 요청받은 sessionId 쿠키 값으로 세션 저장소에서 값 조회 세션 만료 요청한 sessionId 쿠키의 값으로, 세션 저장소에 있는 sessionId와 값 제거 이렇게 크게 3가지를 개발해서 직접 세션을 만들어서 로그인 기능에 적용할 있습니다. 그러나, 우리는 서블릿이 공식 지희망하는 세션을 사용해 로그인 기능에 적용시키도록 하겠습니다.
PostMappinglogoutpublic String logoutHttpServletResponse response expireCookieresponse, memberId return redirectprivate void expireCookieHttpServletResponse response, String cookieName Cookie cookie new CookiecookieName, null cookie.setMaxAge0 response.addCookiecookie
세션 쿠키로 설정했기에, 웹 웹 브라우저 종료시 서버에서 해당 쿠키의 종료 날짜를 0으로 지정합니다.
로그아웃 기능도 응답 쿠키를 생성하는데, 이는 MaxAge가 0으로 지정되어, 바로 종료됩니다.
세션을 사용하자세션
위의 보안 문제점을 해결하기 위해선, 결국 사용자의 필요한 정보를 모두 서버에 저장을 해야 합니다. 그리고, 클라이언트와 서버는 판단 불가능한 임의의 식별자 값으로 연결해야 합니다. ex. 판단 가능한 식별자 memberId 1 1을 2,3,4.로 바꿔가면서 다른 사용자로 변경할 시도가 가능 이를 다. 세션을 통해 해결할 있습니다. 세션 ID는 uuid로 만들어지기 때문에, 추정이 불가능합니다. 해당 세션 ID와 보관할 값은 서버의 세션 저장소에 보관합니다.
서버는 mySessionId라는 이름으로 세션id만 쿠키에 담아서 전달 클라이언트는 쿠키 저장소에 mySessionId 쿠키를 유지 결론적으로, 회원과 연관된 중요 정보는 클라이언트로 전달하지 않게 됩니다.
HttpSession
서블릿을 통해 HttpSession 을 생성하면 다음과 같은 쿠키를 생성합니다. 쿠키 이름이 JSESSIONID 이고, 값은 판단 불가능한 랜덤 값입니다. Cookie JSESSIONID5B78E23B513F50164D6FDD8C97B0AD05
HttpSession을 사용해 코드를 작성해보자. ublic class SessionConst public static final String LOGINMEMBER loginMember
HttpSession에 데이터를 보관,조회할 때, 같은 이름이 중복으로 사용되므로, 상수로 정의하였습니다.
OAuth0 을 이용하기 위해서는.
OAuth 의 프로토콜을 이용하기 위해서는 client, 즉 우리의 서버를 Authorization Server KAKAO 에게 알려 주시기 바랍니다야 합니다. 이 절차가 이루어져야 kakao 입장에서는 저희들이 등록된 client 임을 알고 토큰을 넘겨줄 수 있는 것입니다. 또한, Redirect URI 를 지정해야 합니다. 이는 로그인 성공 시에 리디렉션 되는 엔드포인트입니다. 보안을 위해서 localhost 를 제외하고는 https 만 허용됩니다.
등록 이후에는 client id 와 secret 을 얻는다. 이는 액세스 토큰을 얻기 위해서 사용됩니다. id 는 노출되어도 상관없지만, secret 은 Authorization Server 가 권한 있는 client 인지 분간하기 위해 필요하므로 절대 노출되어서는 안됩니다.
로그아웃 기능
로그아웃 기능은 간단합니다. 기존의 세션을 유요하지 않도록 만들어 주면 됩니다. 이제 이미 로그인이 되어 있는 경우에는 로그아웃 버튼을 추가하여 로그아웃을 할 수 있도록 하자. 이미 로그인이 되어있습니다. 그리고 컨트롤러에도 필요 메서드를 생성합니다. 로그인이 성공하면 다음과 같이 표시가 되고 다시 로그인을 시도하면 다음의 창이 보여진다. 로그아웃을 클릭하시면 다시 로그인을 할 수 있도록 세션이 만료됩니다.
자주 묻는 질문
세션 적용하기로그인
세션 생성 sessionId 생성, 세션 저장소에 sessionId와 보관할 값 저장, 응답 쿠키 생성해서 전달 세션 조회 요청받은 sessionId 쿠키 값으로 세션 저장소에서 값 조회 세션 만료 요청한 sessionId 쿠키의 값으로, 세션 저장소에 있는 sessionId와 값 제거 이렇게 크게 3가지를 개발해서 직접 세션을 만들어서 로그인 기능에 적용할 있습니다. 궁금한 내용은 본문을 참고하시기 바랍니다.
세션을 사용하자세션
위의 보안 문제점을 해결하기 위해선, 결국 사용자의 필요한 정보를 모두 서버에 저장을 해야 합니다. 궁금한 내용은 본문을 참고하시기 바랍니다.
HttpSession
서블릿을 통해 HttpSession 을 생성하면 다음과 같은 쿠키를 생성합니다. 구체적인 내용은 본문을 참고 해주시기 바랍니다.