✅ 클라이언트 측에 저장되는 작은 데이터 조각이며, 보통 사용자 정보를 유지하거나 상태를 추적하는 데 사용
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<%
Cookie c_name = new Cookie("ename", "smith");
c_name.setMaxAge(1200);
Cookie c_name2 = new Cookie("ename2", "scott");
c_name.setMaxAge(1200);
response.addCookie(c_name);
response.addCookie(c_name2);
%>
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<%
Cookie c_name = new Cookie("ename", "");
c_name.setMaxAge(0);
Cookie c_name2 = new Cookie("ename2", "");
c_name.setMaxAge(0);
response.addCookie(c_name);
response.addCookie(c_name2);
%>
[!tip] 쿠키는?
여러개를 생성할 수 있으며, 그 값은 문자열만 올 수 있고, 유효시간을 설정하여 로컬에 저장이 된다.
로컬에 저장된 것을 반드시 클라이언트에 전송해야 함. addCookie()
다른 경로에 있는 쿠키를 가져오기 위해서는 setPath()로 경로를 설정하는 것이 필요하다.
메서드 | 기능 |
---|---|
void setAttribute(String name, Object value) | 세션에 name-value 쌍의 데이터를 저장 |
Object getAttribute(String name) | 세션에 저장된 데이터를 리턴 |
Enumeration getAttributeNames() | 세션에 저장된 데이터의 name 목록을 Enumeration 타입으로 리턴 |
void removeAttribute(String name) | 세션에 저장된 데이터를 삭제 |
String getId() | 생성된 세션 객체의 세션 ID를 리턴 |
boolean isNew() | 처음 생성된 세션인지를 리턴 |
long getCreationTime() | 세션이 생성된 시간을 리턴 |
long getLastAccessTime() | 마지막으로 세션이 사용된 시간을 리턴 |
void setMaxInactiveInterval(int second) | 브라우저가 서버에 아무런 요청을 하지 않을 때, 얼마까지 세션을 유지할 것인지를 설정 (기본 30분) |
int getMaxInactiveInterval() | 설정된 세션의 유효시간을 리턴 |
void invalidate() | 브라우저와 매핑된 세션을 강제로 종료 |
컨트롤 계층 리턴타입은 String -> (mapping 안에 있는 url을 통해 메소드를 호출한다.)
단, 메소드 안에서 forward 방식으로 다른 메소드 호출하는 것 불가(왜? forward에서 forward 불가,
redirect에서 forward 가능)
메소드마다 url 매핑하는 어노테이션! & 매핑된 메소드 실행
바디에 넣어 전송할 때 필요
주로 데이터 생성, 수정 시 사용
해쉬값을 넘겨서 처리하는 방법을 지원
보안이슈, 한글처리 이슈 발생할 수 있음.
✅ JSP 스코프에는 Page, Rquest, Session, Application이 있음. 변수의 생존 기간을 제어한다.
getParameter에 들어오는 값은 이름(name)만 처리 가능, id는 불가(`)
jsp에 구현된 modal인가, 아닌가 -> 모달에서 사용하는 아이디가 jsp에서 동시에 사용은 불가!!
왜? id는 문서 전체에서 고유해야하며, 중복되어 사용할 수 없음.
Post 방식 : body에 데이터를 담아서 전송(x-www~~ (form 형식), row(Object 형식) 등)
- @PostMapping : Post 요청이 들어올 때 메소드 실행(주로 데이터 생성, 수정 용도)
- @RequestBody 주로 사용 : 본문에 담긴 데이터를 객체로 변환할 때 주로 사용
get방식 : url을 통한 데이터 전송(길이제한, 인터셉트 가능성)
- @GetMapping : get요청 처리 메소드에 사용
- @RequestParam : Get 방식에서 주로 사용, 쿼리 파라미터 추출 시 사용
const noticeInsert = () => {
console.log("noticeInsert()");
document.querySelector("#f_notice").submit();
};
HttpHeaders headers2 = new HttpHeaders();
headers2.add("Authorization","Bearer "+oat.getAccess_token());
headers2.add("Content-type","application/x-www-form-urlencoded;charset=utf-8");
//HttpHeader와 HttpBody를 하나의 오브젝트에 담기
HttpEntity<MultiValueMap<String, String>> profileRequest = new HttpEntity<>(headers2);
RestTemplate rt2 = new RestTemplate();
ResponseEntity<String> response2 = rt2.exchange("https://kapi.kakao.com/v2/user/me", HttpMethod.POST, profileRequest, String.class);
Gson g2 = new Gson();
KakaoProfile kkp = g2.fromJson(response2.getBody(), KakaoProfile.class);
logger.info("카카오 아이디(번호) : " + kkp.getId());
logger.info("카카오 이메일 : " + kkp.getKakao_account().getEmail());
logger.info("카카오 유저네임 : " + kkp.getProperties().getNickname());
session.setAttribute("nickname",kkp.getProperties().getNickname());
return "redirect:/index.jsp"; //WEB-INF/views/index.jsp
}
@GetMapping("logout")
public String logout(HttpSession session){
//로그아웃 후 세션 지우기
session.invalidate();
return "redirect:/index.jsp";
}
[[REST]]는 Ajax기능과 많이 사용됨. 메소드의 리턴타입이 문자열일 때 @ResponseBody를 써야 함!!
front back이 만나는 부분, 초보의 경우, url이 아닌 리턴을 jsp로만 작성
(https://api.jquery.com/jQuery.ajax/#jQuery-ajax-url-settings)
인증과 인가 구현을 위한 사전 준비를 해 본다
인증과 인가와 관련된 API를 학습하고 활용해 본다
쿠키와 세션을 활용할 수 있다
소셜 로그인 성공 한 사람을 자동으로 회원가입 처리 해주기를 요구하고 있다.
소셜 로그인이 아닌 일반 회원가입자도 회원관리 해줘야 한다.
구글인증이나 카카오인증 처리를 해 보고 제공되는 프로필 정보를 고려하여 테이블 설계를 해보세요.
create table member231228(
)