Wanna be Brilliant Full-Stack Developer
HttpServletRequest 과 HttpServletResponse 의 역할 본문
HttpServletRequest는 HTTP 요청 정보를 캡슐화하는 객체입니다. 이 객체는 클라이언트에서 서버로 전송된 요청 메시지의 내용과 속성을 확인하고 수정할 수 있습니다. 예를 들어, 클라이언트의 IP 주소, 요청 메소드(GET, POST 등), 요청 헤더와 바디 등의 정보가 포함됩니다.
HttpServletResponse는 Http 응답 정보를 캡슐화하는 객체 입니다. 이 객체는 서버에서 클라이언트로 전송되는 응답 메시지의 내용과 속성을 확인하고 수정할 수 있습니다. 예를 들어, 응답코드, 응답 헤더와 바디등의 정보가 포함됩니다.
package com.mes.Common.Interceptor;
import com.mes.Common.DataTransferObject.Page;
import com.mes.mesSystem.SystemService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
@Slf4j
@Component
public class Handler extends HandlerInterceptorAdapter {
@Autowired
private SystemService systemService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
HttpSession session = request.getSession();
Session userData = (Session) session.getAttribute("userData");
response.setHeader("pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.addHeader("Cache-Control", "No-store");
response.setDateHeader("Expires", 1L);
try {
//세션 회원 정보 검증
if (ObjectUtils.isEmpty(userData)) {
if (!request.getServletPath().equals("/")) {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<script>alert(' 회원데이터가 존재하지않습니다.\\n 로그인페이지로 이동합니다.'); location.href='/login';</script>");
out.flush();
out.close();
return false;
} else {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<script>location.href='/login';</script>");
out.flush();
out.close();
return false;
}
//ajax요청 검증
} else if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
String path = request.getParameter("menu_code");
if (path != null) {
String log_check = request.getParameter("menu_check");
if (log_check != null) {
Page p = new Page();
p.setKeyword(path);
}
}
//아이콘(favicon), error 예외
} else if (request.getServletPath().equals("/icon.ico") || request.getServletPath().equals("/icon2.ico") || request.getServletPath().equals("/favicon.ico") || request.getServletPath().equals("/error")) {
} else {
session.setMaxInactiveInterval(60 * 60 * 24);
}
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
}
else if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
String path = request.getParameter("menu_code");
if (path != null) {
String log_check = request.getParameter("menu_check");
if (log_check != null) {
Page p = new Page();
p.setKeyword(path);
}
}
//아이콘(favicon), error 예외
}
HttpServletRequest 인터페이스는 클라이언트에서 전송된 HTTP 요청 정보를 저장합니다. preHandle 메서드에서는 HttpServletRequest 인스턴스를 통해 클라이언트 요청의 HTTP 헤더, 파라미터, 쿠키 등의 정보를 읽어옵니다. 예를 들어, 아래 코드는 클라이언트가 전송한 X-Requested-With 헤더 값을 가져와서 Ajax 요청인지 확인하는데 사용됩니다.
response.setHeader("pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.addHeader("Cache-Control", "No-store");
response.setDateHeader("Expires", 1L);
HttpServletResponse 인터페이스는 서버에서 클라이언트로 전송할 HTTP 응답 정보를 저장합니다. preHandle 메서드에서는 HttpServletResponse 인스턴스를 통해 HTTP 응답 헤더와 바디를 설정합니다. 예를 들어, 아래 코드는 클라이언트에게 'no-cache' 캐시 헤더를 전송하여 캐싱을 방지합니다.
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<script>alert(' 회원데이터가 존재하지않습니다.\\n 로그인페이지로 이동합니다.'); location.href='/login';</script>");
out.flush();
out.close();
그리고 이 코드에서는 PrintWriter 객체를 사용하여 HTML을 직접 생성하여 클라이언트로 보내고 있습니다. 이는 서버에서 발생한 에러 및 인증 문제를 클라이언트에게 전달하는 역할을 하고 있습니다.
HttpServletRequest:
- HttpServletRequest는 웹 애플리케이션에서 클라이언트의 HTTP 요청에 대한 정보를 제공하는 객체입니다.
- 웹 브라우저에서 서버로 전송되는 HTTP 요청에 대한 다양한 정보를 HttpServletRequest를 통해 얻을 수 있습니다.
- HttpServletRequest를 통해 요청 메서드, 헤더, 쿠키, 세션, 파라미터, 경로, URL 등의 정보를 확인할 수 있습니다.
- 이 정보를 활용하여 클라이언트의 요청에 맞는 서비스를 제공하고, 요청 처리 결과를 생성하여 HttpServletResponse로 전달할 수 있습니다.
HttpServletResponse:
- HttpServletResponse는 웹 애플리케이션에서 클라이언트로 응답을 보내는데 사용되는 객체입니다.
- 서버에서 클라이언트로 보내는 응답에 대한 설정과 내용을 HttpServletResponse를 통해 조작할 수 있습니다.
- HttpServletResponse를 사용하여 응답 상태 코드, 헤더, 쿠키, 출력 스트림 등을 설정할 수 있습니다.
- 서버에서 생성한 응답 결과를 HttpServletResponse를 통해 클라이언트에게 전송할 수 있습니다.
- 이를 통해 클라이언트에게 HTML 페이지, 이미지, 파일 등을 제공하고, 클라이언트의 요청에 대한 응답을 생성할 수 있습니다.
위 코드에서 HttpServletRequest와 HttpServletResponse는 인터셉터의 `preHandle` 메서드의 매개변수로 사용됩니다. 이를 통해 클라이언트의 요청 정보를 확인하고, 필요한 경우 응답을 생성하거나 요청을 가로채는 등의 작업을 수행할 수 있습니다.
`preHandle` 메서드는 핸들러(컨트롤러)의 실행 전에 호출되는 메서드로, 클라이언트의 요청이 핸들러에 전달되기 전에 실행됩니다. 이 메서드에서 HttpServletRequest와 HttpServletResponse를 통해 다음과 같은 작업이 수행됩니다:
1. 세션 정보 확인:
- HttpSession을 사용하여 세션 정보를 확인합니다.
- `session.getAttribute("userData")`를 통해 "userData"라는 이름의 세션 속성 값을 가져옵니다.
- 세션 정보를 활용하여 로그인 여부나 인증 상태 등을 확인할 수 있습니다.
2. 응답 헤더 설정:
- `response.setHeader()`를 통해 응답 헤더 값을 설정합니다.
- 여기서는 캐시 관련 헤더 값을 설정하여 브라우저에서 페이지 캐시를 사용하지 않도록 합니다.
3. 요청 유효성 검증:
- 클라이언트의 요청이 유효한지 검증합니다.
- 세션 정보
'Back-End > Spring Boot' 카테고리의 다른 글
2/22 SpringBoot 페이스북 로그인 구현 완료 (0) | 2022.02.22 |
---|---|
2/21 SpringBoot 페이스북 로그인 앱등록 및 설정 (0) | 2022.02.21 |
2/21 SpringBoot 유효성 검사 및 자동화 AOP처리 (0) | 2022.02.21 |
2/21 SpringBoot 뷰 렌더링 완료하기! (0) | 2022.02.21 |
2/18 SpringBoot Comment 모델 만들기 (0) | 2022.02.18 |