스프링부트+jsp로 배달사이트 만들기-21 인터셉터로 주소 불러오기
2021. 12. 10. 18:09ㆍ스프링부트
현재 메인페이지에서 저장한 주소는 세션에 저장 되있는 값만 사용하기 때문에 세션시간이 지나거나 서버가 내려가면 저장된 주소가 사라지게 됩니다
인터셉터를 활용해 같이 저장했던 쿠키를 확인하고 쿠키에 주소정보가 있다면 그 값을 꺼내 사용할 수 있게 하겠습니다
인터셉터를 사용하기 위해 interceptor패키지를 만들고 AddressInterceptor 클래스를 생성합니다
public class AddressInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
Map<String, String> addMap = (Map<String, String>)session.getAttribute("BMaddress");
if(addMap == null) {
Cookie[] cookies = request.getCookies();
System.out.println(cookies.length);
for (int i = 0; i < cookies.length; i++) {
if(cookies[i].getName().equals("BMaddress")) {
Gson gson = new Gson();
addMap = gson.fromJson(URLDecoder.decode(cookies[i].getValue(), "UTF-8"), Map.class);
session.setMaxInactiveInterval(3600 * 3);
session.setAttribute("BMaddress", addMap);
}
}
}
return true;
}
}
인터셉터를 사용하기 위해서는 HandlerInterceptor의 메서드를 구현해야 합니다
HandlerInterceptor의 메서드는 아래 3가지가 있습니다
- preHandle() 특정 uri을 호출했을 때 uri에 매핑된 컨트롤러의 메서드를 실행 하기 전에 실행하고 return 값이 true면 컨트롤러의 메서드를 실행하고 false면 실행하지 않습니다
- postHandle() 컨트롤러 메서드를 실행하고 화면으로 결과를 보여주기 전에 실행됩니다
- afterCompletion() 화면을 보여주고 난 뒤 실행됩니다
컨트롤러 실행 전 주소가 있는지 없는지만 확인하면 되기 때문에 preHandel()만 구현하면 됩니다
구현한 인터셉터를 실행하기 위해 설정파일에 등록합니다
WebConfig에 아래에 추가합니다
@Bean
public AddressInterceptor addressInterceptor() {
return new AddressInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(addressInterceptor())
.addPathPatterns("/*");
}
AddressInterceptor을 bean으로 등록하고
registry.addInterceptor()에 실행할 인터셉터를 addPathPatterns()에 실행할 uri를 적어주는데 모든 uri에 실행될 수 있게 설정했습니다
'스프링부트' 카테고리의 다른 글
스프링부트+jsp로 배달사이트 만들기-23 찜한 가게 목록 (0) | 2021.12.10 |
---|---|
스프링부트+jsp로 배달사이트 만들기-22 찜하기(회원) (0) | 2021.12.10 |
스프링부트+jsp로 배달사이트 만들기-20 주문목록 수정/페이징 (0) | 2021.12.09 |
스프링부트+jsp로 배달사이트 만들기-19 매장목록 수정/페이징 (0) | 2021.12.09 |
스프링부트+jsp로 배달사이트 만들기-17 xss 방어하기 (0) | 2021.12.09 |