카테고리 없음

1213 WebServer 6일차

삶은고구마 2023. 12. 13. 09:30

 

로그인 하는 과정

사용자 입장에서는 

-메인

-로그인화면

-로그인성공화면

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

 


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

 

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