2021. 7. 20. 10:58
쿠키 생성
1. 쿠키를 만드는 법은 아래 처럼 javax.servlet.http.Cookie 클래스 객체를 생성한 후, 인스턴스 생성시에 쿠키의 이름이 되는 "key" 값과, 쿠키의 값이되는 "value"를 넣어준다.
Cookie cookie = new Cookie("key", "value");
2. 1번의 과정만으로는 쿠키가 http 통신을 통해 생성되거나 전달되지 않는데, HttpServletRequest 객체에 실어서 전달해야 브라우저에 쿠키가 생성이 된다.
HttpServletResponse response;
response.addCookie(new Cookie("key", "value"));
쿠키 읽기
1. 쿠키 읽는 방법
HttpServletRequest request;
request.getCookie();
for(int i = 0; i < this.cookies.length; i++) {
if(cookies[i].getName().equals(name)) {
return cookies[i].getValue();
}
}
request 객체로 부터 getCookie() 메서드를 이용해서, Cookie[] 타입의 배열을 리턴 받아서 저장한다.
따라서, for 문에 돌아가는 cookies는 Cookie[] cookie 로 선언 된 객체다.
배열이기 때문에, cookies[i].getName() 을 통해 모든 쿠키의 이름을 얻어 올 수 있고, cookies[i].getValue()를 통해 값을 얻을 수 있다.
필요해서 만든 클래스
: 반복적으로 사용해야하니 좀 더 사용하기 편하게 클래스를 만들어 보았다
: 쿠키로 저장할 때, bearer 토큰을 저장해야하는 작업이 있어서, AES256 으로 암호화 하여, 저장했다가, 서버에서 처리할 때, 쿠키를 읽어서 복호화 하는 반복되는 작업에 유용할 것 같아서 만들었다.
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
public class CookieUtil {
private Cookie[] cookies;
private Cookie cookie;
public CookieUtil() {
// TODO Auto-generated constructor stub
}
// 객체 생성시에 request 객체를 받는 경우
// 쿠키이름으로 쿠키 값을 얻을 때!
public CookieUtil(HttpServletRequest request) {
this.cookies = request.getCookies();
}
// 쿠키이름으로 쿠키 값을 얻는 메소드
public String getValue(String name) {
for(int i = 0; i < this.cookies.length; i++) {
if(cookies[i].getName().equals(name)) {
return cookies[i].getValue();
}
}
return null;
}
// 쿠키 추가하는 메서드
public CookieUtil addCookie(String key, String value) {
this.cookie = new Cookie(key, value);
return this;
}
// 쿠키 추가후에 쿠키 만료일을 체이닝하는 메서드
public CookieUtil setExpire(int period) {
this.cookie.setMaxAge(period);
return this;
}
// 쿠키 추가후에 HttpOnly 옵션을 체이닝하는 메서드
public CookieUtil setHttpOnly(boolean setHttpOnly) {
this.cookie.setHttpOnly(setHttpOnly);
return this;
}
// 쿠키 생성을 마칠 때, 쿠키를 리턴하는 메서드
public Cookie build() {
return this.cookie;
}
}
: 사용 예시
response.addCookie(cookieUtil.
addCookie("refreshToken", refreshToken).
setHttpOnly(true)
.setExpire(60 * 60 * 8).build()
);
'Spring Framework > Spring' 카테고리의 다른 글
[Spring] JSON 구조 데이터 받기 (0) | 2021.11.29 |
---|---|
[JAVA] Date 클래스(java.sql) -> Date.valueOf(String) (0) | 2021.09.30 |
[JSON] Java - json 파싱 (0) | 2021.07.13 |
[spring] mybatis 설정 (0) | 2021.03.30 |
[03/07] Spring (mysql 연결), Mysql 5.7 CE버전 (0) | 2021.03.07 |