기록
  • 1213 WebServer 6일차
    2023년 12월 13일 09시 30분 05초에 업로드 된 글입니다.
    작성자: 삶은고구마

     

    로그인 하는 과정

    사용자 입장에서는 

    -메인

    -로그인화면

    -로그인성공화면

    이렇게만 보이지만 실제로는 이런 방식으로 진행된다..

     


    session & cookie 이해하기

     

    http는 상태를 관리하지 않음.(보관x)

    오는 요청에 응답할 뿐...

    그리고 응답이 완료되면 연결이 끊김.

    하지만 상태를 유지해야할 경우가 있다. [사용자 로그인 유지]

    이것을 가능하게 해주는게 쿠키와 세션이다.[로그인과 무관하고 상태만 유지]

    쿠키:클라이언트쪽에 저장

    세션:서버쪽에 저장

    [기본 30분 제한 시간이있고, 이 후 폐기되어 유효하지않은 세션이 됨, 이런 경우 새로운 세션을 생성하여 클라이언트에 전송]

    서버에는 하나의 세션만 있는게 아니고 수많은 세션들이 있음.

    이중에서 내가 원하는 세션을 찾아 매칭할수있어야하는데, 클라이언트와 서버간 요청/응답시 헤더에 원하는 sid로 매칭.

     

     


     

     

    db의 정보는 갱신이 되었는데 페이지에 즉각 반영이 되지 않은 이유

    현재 세션이 이전 loginMember 세션이기 때문임.

     

    회원탈퇴 a 태그 : get 방식

    하지만 회원탈퇴는 delete 이므로 post방식을 사용해야 한다.

    우회하는 방법


    Filter

    filter

    servlet마다 공통된 작업이 있다면 filter를 사용해서 중복을 제거할 수 있다.

    servlet보다 앞 / jsp보다 늦게 즉, client<->server단 에서 말 그대로 "필터" 역할을 하는 것.

     

    -

    http://localhost:8080/mvc/member/memberDetail

    =>로그인 후 마이페이지 순으로 접근해야 하는데 

    주소창에 해당 주소만 쳐도 비로그인 상태에서도 접근이 가능해짐

    이런경우를 막아보자.

    //인증여부검사
            HttpSession session  = req.getSession();
            Member loginMember = (Member) req.getSession().getAttribute("LoginMember");
            if(loginMember==null)
            {
                session.setAttribute("msg","로그인 후 사용 가능합니다.");
                //그리고 인덱스페이지로 강제이동
                resp.sendRedirect(req.getContextPath()+"/");
                return;//조기리턴 이후 코드 실행되지않는다
            }
            //tip:redirect나 forward 이후에는 실행코드는 없어야 한다.

     

    각 서블릿 상단에 중복되는 코드라 filter를 적용하면 좋을 것 같다.

     

    filter 역할을 할 class를 하나 생성한 뒤, 

    WebFilter annotation에 해당 필터를 적용할 servlet 페이지를 나열하면 된다.

    @WebFilter(urlPatterns = {
            "/member/memberDetail",
            "/member/memberUpdate",
            "/member/memberDelete"
    
    })
    public class AuthenticationFilter extends HttpFilter {
    
        @Override
        protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
    
            //인증여부검사
            HttpSession session  = request.getSession();
            Member loginMember = (Member) request.getSession().getAttribute("LoginMember");
            if(loginMember==null)
            {
                session.setAttribute("msg","로그인 후 사용 가능합니다.");
                //그리고 인덱스페이지로 강제이동
                response.sendRedirect(request.getContextPath()+"/");
                return;//조기리턴 이후 코드 실행되지않는다
            }
            //tip:redirect나 forward 이후에는 실행코드는 없어야 한다.
    
    
            super.doFilter(request, response, chain);
        }
    }

     

     

    get post
    조회 (멱등) 즉, 조회 전 후 상태가 달라지지 않음. 등록 수정 삭제
    select insert update delete
    forward를 통한 view(jsp)사용 redirect를 통한 url 변경
    forward인 경우 계속 그 페이지를 실행하기 때문에 
    등록,수정,삭제가 새로고침 등을 할 때마다 중복 실행됨.
    a태그 
    location href 속성
    open()함수
    form - method get
    form - method post

     

    멱등: 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질

    댓글