본문 바로가기
Spring Boot/스프링 부트로 배우는 자바 웹 개발

필터와 쿠키

by 코리늬 2018. 7. 12.

2.4.1 필터

- 요청에 대해 전처리 작업이 필요한 경우 사용한다.


2.4.1.1 웹 필터

- 필터는 필터 인터페이스를 상속받아 만들 수 있다.

- init과 destroy 메소드를 가지고, 필터 기능 사용을 위한 doFilter 메소드가 있다.


- 마찬가지로 필터의 URL 매핑을 위해 WebFilter 어노테이션을 사용할 수 있다.

- 필터가 동작해 jsp에 있는 ~필터 테스트~ 앞뒤로 doFilter 메소드 안의 내용이 출력 되었다.

- URL 기준으로 전처리를 할 수 있고, 서블릿으로도 할 수 있다.(서블릿은 서블릿 이름으로 매핑)


* 필터는 여러 개를 등록해서 사용할 수 있다. 여러 개의 필터를 등록해서 처리하는 것을 필터 체인(filter chain)이라고 한다.


2.4.2 쿠키

2.4.2.1 쿠키의 구성

- 쿠키는 사용자가 사이트를 방문했을 때, 사용자의 컴퓨터에 저장되는 정보를 말한다.

구성요소

  • 이름 : 각각의 쿠키의 값을 식별하기 위한 키
  • 값 : 특정 이름으로 쿠키에 지정된 값
  • 유효 시간 : 쿠키의 유지 시간
  • 도메인 : 쿠키를 전송할 도메인
  • 경로 : 쿠키를 전송할 요청 경로
- 쿠키는 사용자의 PC에 저장되므로 로그인하지 않은 사용자에 대해서 다르게 적용할 필요가 있을 경우 유용하다.

2.4.2.2 쿠키 생성
- 쿠키를 생성할 때는 간단히 생성자를 이용해 cookie 객체를 생성할 수 있다.

Cookie jcookie = new Cookie(name, value);

- 쿠키는 javax.servlet.http 패키지에 포함되어 있고, map처럼 key, value 형태로 사용하고 도메인과 최대 유효 기간을 설정할 수 있다.


"); writer.println("
"); Cookie cookie = new Cookie("MyCookie","cook"); cookie.setMaxAge(3600); //1시간 res.addCookie(cookie); //response 객체에 쿠키 저장 writer.println("readcookie

쿠키를 생성하고 name은 MyCookie로, value는 cook, 쿠키 유효 시간은 1시간으로 설정했다.

쿠키 읽어오기
"); Cookie cookies[] = req.getCookies(); //getCookies 메소드로 저장된 쿠키들을 꺼낸다. if(cookies != null) { for(Cookie cookie : cookies) { if(cookie.getName().equals("MyCookie")) { //쿠키 생성시 MyCookie로 저장된 쿠키 값을 출력한다 writer.println("쿠 키 : " + cookie.getValue()); } } } writer.println(""); } }

request 객체에서 getCookies 메소드로 저장된 쿠키들을 꺼낸 후 getValue로 쿠키값을 출력한다.

readcookie를 클릭시 입력한 쿠키 값 cook이 출력되는 모습을 볼 수 있다.


2.4.2.3 쿠키값 수정 및 삭제

- 쿠키값을 변경하려면 같은 이름으로 쿠키를 생성해 새로운 값을 지정하면 된다.

Cookie modifiedCookie = new Cookie("name", "새로운 값")


- 쿠키 자체를 삭제하는 API는 존재하지 않지만 쿠키의 유효 시간을 0으로 설정함으로써 쿠키값을 무효화 할 수 있다.

* 쿠키값 한글 입력 시에는 URLEncoder를 이용해 문자열을 감싸주면 된다.

-  Cookie newCookie = new Cookie("kor", URLEncoder.encode("데이터","UTF-8");

'Spring Boot > 스프링 부트로 배우는 자바 웹 개발' 카테고리의 다른 글

스프링 XML 설정  (0) 2018.07.25
세션  (0) 2018.07.12
서블릿 활용  (0) 2018.07.11
서블릿 설정, 서블릿 내부 동작  (0) 2018.07.09
개발 환경의 변화와 자바  (0) 2018.07.09

댓글