@session 명령어
HttpSession session = request.getsession();
session.setMaxInactiveInterval(600) //세션 스코프 초단위
session.removeAttribute() // 세션제거
session.invalidate() // 세션무효화
@ Session은 관련 자원을 모두 Server에서 관리하고
Session ID만 Cookie를 통해 Browser로 전달
@ Cookie는 Server에 의해서 생성이 되지만
관리는 Browser에서 진행함 (Cookie 최대크기 5kb)
- 아이디 저장 눌렀을때 로그인값 저장하기
// 서블릿부분
// C1) 아이디 저장 체크박스 값 가져오기
String save = request.getParameter("save");
System.out.println("save : " + save);
// -> 체크박스에서 별도의 value가 없을 경우
// 체크시 on/ 미 체크시 null 반환
// C2) javax.servlet.http.Cookie 이용하여 쿠기생성
// 매개변수값이 key가 아니라 name임 name, value 형태
Cookie cookie = new Cookie("saveId", memberId);
// C3) 아이디 저장이 체크된 경우
if(save != null){
// 쿠키가 유지될수 있는 유효기간 설정
cookie.setMaxAge(60 * 60 * 24 * 7); // ex)7일로 설정
else {
cookie.setMaxAge(0); //없는 경우 쿠킼 만료
}
// C4) 쿠키가 사용될 수 있는 유효한 디렉토리(경로) 설정
cookie.setPath("/"); //해당 도메인 전역에서 사용 가능
// C5) response 객체에 쿠키를 담아 클라이언트(브라우저) 전송
response.addCookie(cookie);
// -> 이후 쿠키 관리는 브라우저가 맡아서 진행
# 확인방법 : 홈페이지 아이디 저장하고 로그인 후 개발자 도구 열어서
application에 Cookies>로컬호스트 눌러보면 saveId 네임과 JSESSIONID가 있는걸 확인
//로그인체크가 있는 header.jsp부분
// C6)
boolean save = false;
// 아이디 저장 체크박스 값을 수정하기 위한 변수
String saveId = "";
// 쿠키에 저장된 saveId라는 네임이 가지고 있는 벨류값을 저장할 변수
Cookie[] cookie = request.getCookies(); // 전달받은 쿠키를 저장
// 서버 첫 시작시 request.getCookies()의 값이 null
// -> if문으로 처리하지 않는 경우 페이지로딩시
// NullPointerException이 발생됨
if(cookies != null){
for(Cookie c : cookies){
// 쿠키 객체에서 name을 얻어와 그 값이 "saveId"와 같은지 비교
if(c.getName().equals("saveId")){
saveId = c.getValue();
save = true;
}
}
}
// html의 Id입력값부분에 value="<%= saveId %>
// check값 부분에 value="<%= save ? "checked" : "" %>"
@@@ filter @@@
@필터생성
//filterName : 필터의 이름 지정(필터 순서 지정 시 사용)
//urlPatterns : 필터가 적용될 url 패턴 지정(/* : 모든 url)
@WebFilter(filterName="enconding", urlPartterns= "/*")
@Filter는 request, response가 Servlet/JSP 또는 클라이언트에게 도달하기 전에
필요한 전/후 처리작업을 맡는 클래스
(FilterChain 을 통해 여러필터 사용가능)
@Filter 생명주기
init() -> doFilter() -> destory()
@Filter 등록 방법
1. web.xml에 등록
2. @WebFilter 어노테이션 사용 (Servlet 3.0 이상)
-> tomcat 8.5v == servlet 3.1
@doFilter(~~~)
// 서블릿 컨테이너가 현재 요청/응답에 필터 적용이 필요하다 판단되면 호출되는 메소드
// 요청/응답 시 문자 인코딩을 모두 UTF-8로 변환하는 필터
// 1. 요청받은 값 변환
request.setCharacterEnconding("UTF-8");
// 2. view 전달(응답)할 값 변환
response.setContentType("test/html; charset=UTF-8");
chain.doFilter(request, response);
@Filter 인터페이스의 doFilter
-> 필요한 필터링 작업을 작성하는 곳
@FilterChain의 doFilter()
-> 다음 필터로 넘어가거나, 현재 필터가 마지막일 경우 요청된 Servlet/JSP 또는 View를 호출
@@LoginFilter //로그인안되면 못들어가는 부분 필터처리
WebFilter(urlPatterns = {"/member/mypage.do",
"/member/changePwd.do",
"/member/secession.do"})
//doFilter()
// 로그인확인 -> Session -> request
// ServletRequest 는 HttpServletRequest의 자식이므로 다운캐스팅해서 사용
// ServletResponse 도 마찬가지
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
HttpSession session = req.getSession();
Member loginMember = (Member)session.getAttribute("loginMember");
if(loginMember == null){
//로그인이 되어있지않은경우
session.setAttribute("msg","잘못된 경로로 접근하였습니다.");
res.sendRedirect(req.getContextPath()); //메인페이지로 이동
} else {
chain.doFilter(request, response);
// 로그인이 되어있는 경우
// 다음 필터 또는 요청된 servlet/JSP로 이동
}
'study > WebServer' 카테고리의 다른 글
8_ws_(페이징처리) (0) | 2020.01.22 |
---|---|
7_ws_(암호화) (0) | 2020.01.17 |
5_ws_(mapge 수정정보창) (0) | 2020.01.15 |
4_ws_(scope,session명령어) (0) | 2020.01.14 |
3_ws_(JSP2) (0) | 2020.01.11 |