로그인 구현 / Session 방식

강한친구·2022년 8월 8일
0

Session 로그인

아는게 이게 전부라

인0런에서 스프링강의를 들으면서 로그인에 관련한 공부를 짧막하게 했었는데, 그때 배운것이 바로 세션을 통한 로그인이다.

FlowChart

  1. Front에서 username, password를 서버에서 지정한 url로 보낸다.

  2. 서버가 이를 받아서 memberRepository에 동일한 이름의 username이 존재하는지 확인한다.

  3. 존재하면 로그인 성공 처리를 하고 session을 만들어서 session안에 username 정보를 담은 후 반환한다.

  4. session을 통해 유저가 로그인 상태인지를 확인하면서 interceptor가 작동하고, 이를 기반으로 요청을 보낸 사용자도 확인한다.

Code

코드보단 Code가 간지난다.

package Focus_Zandi.version1.web.Interceptor;

import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginCheckInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession(false);
        if (session == null || session.getAttribute("loginMember") == null) {
            response.sendRedirect("/index"); // 실제로는 아마 에러페이지나 로그인 시도 페이지로 돌려보내야 할듯 함
            return false;
        }
        return true;
    }
}

이런식으로 인터셉터에서 session을 가져오지 못했다면 전부 접근근지를 해버리는 방법을 사용했었다 .

    private String getUsername (HttpServletRequest request) {
        HttpSession session = request.getSession(false);
        Member context =session.getAttribute("Session_Name");
        return context.getUserName();
    }

session안에 담긴 user정보는 이렇게 꺼내오는 방식이다.

HttpSession session = request.getSession(false);
session.setAttribute(member)

로그인 할때는 이렇게 session을 만들고 안에 정보를 set해준다.

한계

  1. 로그인이 이렇게 단순한 사이트들도 있겠지만, 우리가 목표로 하는건 이정도가 아니였고, 이를 방지하려면 회원가입시 메일인증, 비밀번호 찾기, 문자로 번호 찾기 등 좀 다양한 방법이 요구되었다.

  2. 중복 로그인 방지, Session위변조 이런 것들을 막으려면 SpringSecurity가 필요했다.

  3. Security를 쓸거면 아예 Oauth2 로그인까지 적용하자는 이야기가 나왔고 그래서 좀 더 편?리하다고 알려져있는 OAuth2로 가닥을 잡았다.

이게 실수였다.

다음 단계

일단 이때는 Security에 대해 아는게 하나도 없었다. 물론 지금도 필터 구조나 custom 방법은 잘 모르고 그냥 단순하게 사용법정도를 익힌 수준이라 할 말은 없지만, 아무튼 Spring Security를 공부하고 이를 적용해야했다.

0개의 댓글