스프링 347

65. 스프링 부트 오류페이지

우리가 지금까지 오류페이지를 등록할 때, 에러페이지 컨트롤러를 따로 만들고, 그걸 @Component public class WebServerCustomizer implements WebServerFactoryCustomizer { @Override public void customize(ConfigurableWebServerFactory factory) { ErrorPage errorPage404 = new ErrorPage(HttpStatus.NOT_FOUND, "/error-page/404"); ErrorPage errorPage500 = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error-page/500"); ErrorPage errorPageEx ..

63. 서블릿 예외처리 필터

예외 발생 시 WAS 컨트롤러 이미 필터, 인터셉터 등을 거쳤기 때문에 검증같은 것은 완료를 한 것이다. 근데도 또 다시 거친다는 것은 너무 비효율 적이다. 그래서, 결국 저 예외 처리에 대한 호출이 클라이언트가 요청한 것인지, 아니면 서버 내부의 요청인지 구분해서 처리해야 한다. 그것이 DispatcherType에 나타난다. request.getDispatcherType() 하면 알 수 있다. sendError()나 예외를 뿌릴 시는 DispatcherType이 ERROR로 나오고, 고객이 처음 요청했을 시 에는 REQUEST 로 나온다. 중간에 바뀔 수도 있는 거다. ERROR : 오류 REQUEST : 클라이언트 요청 FORWARD : jsp 등 forward를 호출 하는 것을 썼을 때. INCLU..

62. 오류 화면 커스텀

오류 화면이 예쁘지 않다면 사용자는 망한 서비스 라고 생각한다. 우리가 할 일은 1. 커스터마이징을 한다고 스프링에게 일러준다. - 에러페이지 추가, 호출할 컨트롤러 @Component public class WebServerCustomizer implements WebServerFactoryCustomizer { @Override public void customize(ConfigurableWebServerFactory factory) { ErrorPage errorPage404 = new ErrorPage(HttpStatus.NOT_FOUND, "/error-page/404"); ErrorPage errorPage500 = new ErrorPage(HttpStatus.INTERNAL_SERVER_ER..

60. ArgumentResolver 활용

public String homeLoginV3Spring(@SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember, Model model) { if(loginMember == null){ return "home"; } model.addAttribute("member", loginMember); return "loginHome"; } 이런 거 인자가 너무 긴데, 물론 이정도도 편리하긴 하지만, 우리가 직접 애노테이션 만들어서 활용할 수는 없을까? @GetMapping("/") public String homeLoginV3ArgumentResolver(@Login Member loginMember, Mode..

57. 스프링 인터셉터

스프링 인터셉터도 서블릿 필터와 같이 공통 관심사항을 해결하는 기술이다. 기능도 훨씬 강력하다. 흐름은 HTTP 요청 -> WAS -> 필터 -> 디스패처서블릿 -> 스프링 인터셉터 -> 컨트롤러 이다. 스프링 인터셉터는 스프링MVC의 기능이기 때문에, 결국 디스패처 서블릿 이후에 등장하게 된다. 스프링MVC의 시작점이 디스패처 서블릿 이니까. 스프링 인터셉터의 제한은 저 흐름에서 컨트롤러로 가는 것을 막는 것이다. 얘도 똑같이 체인 기능이 있다. 다음이 실제 스프링 인터셉터의 인터페이스이다. public interface HandlerInterceptor { default boolean preHandle(HttpServletRequest request, HttpServletResponse respons..

56. 인증 체크 필터 구현

이제 로그인 하지 않았다면 상품관리 등의 페이지에 접근하지 못하도록 하는 필터 로직을 개발해 보자. @Slf4j public class LoginCheckFilter implements Filter { private static final String[] whitelist = {"/", "/members/add", "/login", "/logout", "/css/*"}; @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletReque..