RequestDispatch(forward&include) & Redirect 활용한 로그인&로그아웃 예제
/webStudy01/WebContent/login/loginForm.jsp
<form id="loginForm" action="<%=request.getContextPath() %>/login/loginProcess.do" method="post">
- action이 URI인데 URI에 매핑되는 서블릿이 필요
- action은 클라이언트 사이드방식
<%=request.getContextPath() %>
필수!
- method방식이 get이면 로그인 정보가 쿼리스트링으로 날라가서 정보보호가 되지 않는다.
<%
//session 기본객체
String mem_id = (String) session.getAttribute("mem_id");
//session에 값을 넣으면 알아서 지워져야 한다. -> 한번 꺼내자마자 알아서 삭제 flashAttribute, 새로고침하면 null로 바뀜
session.removeAttribute("mem_id");
%>
<input type="text" name="mem_id" value="<%=mem_id%>" required/>
- session에서 가져온 getAttribute("mem_id")값을 input안 value=<%=mem_id%>로 받는다.
- session.removeAttribute("mem_id")한 이유는 로그인 실패시 한번은 아이디값이 유지가 되는데 한번 꺼내자마자 삭제가 된다. 그래서 로그인페이지를 F5를 누르면 아이디 input칸이 null이 된다. -- flashAttribute
- required="required" -- "required" 생략가능 -- required는 boolean속성
<input type="text" name="mem_pass" required pattern="^(?=.*[0-9]+)(?=.*[a-z]+)(?=.*[A-Z]+).{5,12}$"/>
<input type="submit" value="로그인"/>
클라이언트사이드에서 정규식 처리
정규식 참고 페이지
<%
String authMember = (String)session.getAttribute("authMember");
if(StringUtils.isBlank(authMember)){
//아직 로그인을 안했다면
%>
///////form태그 로그인정보 input + submitbutton
<%
}
%>
- 서블릿에서 로그인 성공했을때 session객체에 setAttribute한 값을 getAttribute해서 이값이 StringUtils.isBlank(authMember)처리 -- 로그인 상태에서 로그인페이지를 들어가면 session에 로그인한 아이디가 있으니까 하얀화면이 나온다.