프로필사진
컨트롤러 구현(3) - @CookieValue , @RequestHeader

2019. 11. 14. 23:48🔴 Spring

300x250

- @CookieValue : 쿠키를 파라미터로 전달받음

<CookieController.java>

package com.bitcamp.mvc.member;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class CookieController {
	
	@RequestMapping("/cookie/makeForm")
	public String getMakeForm() {
		
		return "cookie/makeForm";
	}
	
	@RequestMapping("/cookie/makeCookie")
	public String makeCookie(
			@RequestParam(value = "cName", defaultValue = "none") String cookieName,
			@RequestParam(value = "cValue", defaultValue = "none") String cookieValue,
			HttpServletResponse response //응답 생성
			) {
			
		// 쿠키 생성
		Cookie c = new Cookie(cookieName, cookieValue);
		// 쿠키 전송
		response.addCookie(c);
		
		return "cookie/makeCookie";
	}
	
	@RequestMapping(value = "/cookie/viewCookie", method=RequestMethod.GET)
	public String selectCookie() {
		
		return "cookie/selectForm";
	}
	
	@RequestMapping(value = "/cookie/viewCookie", method=RequestMethod.POST)
	public String viewCookie(
			@CookieValue(value = "nickname", defaultValue = "none") String cValue, 
** Cookie는 사용자가 결정하는 것이 아니라 개발자가 저장하는 것, 
따라서 보통은 @CookieValue(value = "키") String 값 -> 키를 입력해서 값을 가져온다
			@RequestParam(value = "cName", required = false) String cName,
			HttpServletRequest request,
			Model model
			) {
		
		//model.addAttribute("cName", "nickname");
		//model.addAttribute("cValue", cValue);
		
		Cookie[] cookies = request.getCookies();
		for(int i=0; i<cookies.length; i++) {
			if(cookies[i].getName().equals(cName)) {
				model.addAttribute("cName",cName);
				model.addAttribute("cValue",cookies[i].getValue());
			}
		}
		
		return "cookie/viewCookie";
	}
}

- @RequestHeader : HTTP 요청 헤더 값 → 메소드 파라미터로 전달받음

F12를 눌러 Network탭을 보면 Request Headers를 확인할 수 있다.

Referer 요청 헤더는 현재 요청된 페이지의 링크 이전의 웹 페이지 주소를 포함합니다. Referer 헤더는 사람들이 어디로부터 와서 방문 중인지를 인식할 수 있도록 해주며 해당 데이터는 예를 들어, 분석, 로깅, 혹은 캐싱 최적화에 사용될 수도 있습니다.

브라우저 → 서버로 페이지 요청 → REFERER라는 헤더값 설정해서 보냄 (요청한 페이지 정보)
접근제어 : 정상적인 경로를 통해서 처리하는 것인지 체크할 때 유용함
유저의 프라이버시에 관계됨, 리퍼러 정보를 송신하지 않게 설정한 브라우저도 있음

*** Referer 를 붙여주는 경우**

  • a 태그를 통한 이동

  • img 태그의 이미지 호출, script 태그, style 태그, iframe 요청

  • AJAX 의 요청, form 태그 요청

 

<HeaderController.java>

package com.bitcamp.mvc.member;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HeaderController {
	
	@RequestMapping("/header/getHeader")
	public String getHeader(
			@RequestHeader("referer") String referer,
			Model model
			) {
		
		System.out.println(referer);
		model.addAttribute("result", referer);
		
		return "header/header";
	}
	
}

<header.jsp>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>
		header - referer : ${result }
	</h1>
</body>
</html>

<li> <a href="<c:url value="/header/getHeader" />">/header/getHeader</a> </li>

index.jsp → http://localhost:9090/mvc/
hello.jsp → http://localhost:9090/mvc/hello

300x250