복붙노트

[SPRING] 스프링 MVC의 인터셉터

SPRING

스프링 MVC의 인터셉터

나는 봄에 인터셉터를 배우려고 노력하고 있지만 그것을 이해할 수는 없다. 샘플 예제를 시도했지만 성공하지 못했습니다. 나는 간단한 인터셉터를 만들었습니다.

@Component("testInterceptor")
public class testInterceptor extends HandlerInterceptorAdapter {      
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response,   Object handler){
//I suppose this method will be called when I open my login page so just write something here       
        System.out.println("Inside Interceptor...");
        ModelAndView mv = new ModelAndView();
        mv.addObject("name", "test name");
        return true;
}

}

내 spring-servlet.xml에는

로그인 페이지에서 $ {name}

그래서 어디서나 $ {name} 값이나 sysout조차도 볼 수 없습니다.

postHandler 또는 afterCompletion 메서드를 호출 할 때와 구현하기 전에 테스트 할 수있는 방법을 이해할 수조차 없습니다. 이것은 내가 봄에 새롭기도하고 완전히 이해할 수 없기 때문일 수 있습니다. 몇 가지 예를 보여주는 좋은 링크를 제안하면 큰 도움이 될 것입니다.

미리 감사드립니다.

편집 됨 : 이제 로그인 페이지를 호출 할 때 sysout 커넷을 볼 수 있지만 16 번 표시 왜 이렇게됩니까?

해결법

  1. ==============================

    1.먼저 Interface HandlerInterceptor를 살펴보십시오. 매우 잘 설명되어 있습니다! (HandlerInterceptorAdapter는 세 가지 메소드를 모두 구현하지 않으려는 경우에만 도움이되는 하위 클래스입니다.)

    먼저 Interface HandlerInterceptor를 살펴보십시오. 매우 잘 설명되어 있습니다! (HandlerInterceptorAdapter는 세 가지 메소드를 모두 구현하지 않으려는 경우에만 도움이되는 하위 클래스입니다.)

    그런 다음 "처리"체인의 한 단계에 속하는 세 가지 메소드가 있음을 알게됩니다.

    그런 다음 잘못된 메서드를 사용했음을 알 수 있습니다. preHandle 대신 postHandle을 사용하십시오.

    그런 다음 필터에서 만든 모델지도 ModelAndView mv = new ModelAndView (); 뭔가에 연결되어 있지 않으므로 작동하지 않습니다! 하지만 다행히도 postHandle에는 ModelAndView modelAndView 매개 변수가 있습니다. 그리고 연결되지 않은 모델 맵을 작성하는 대신 이것을 사용해야합니다.

    나중에 필터를 두 번 생성했음을 알게 될 것입니다. 한 번은 구성 요소 스캔으로, 한 번은 xml 선언으로 검사합니다. (이 경우 @Compnent Annotation을 제거 할 것을 권장합니다)

    결국 수업은 다음과 같이 보일 것입니다.

    public class testInterceptor extends HandlerInterceptorAdapter {      
       @Override
       public boolean postHandle(HttpServletRequest request,
                HttpServletResponse response,
                 Object handler,
                ModelAndView modelAndView){
           modelAndView.addObject("name", "test name");
       }
     }
    

    마지막으로 봄 보안 로그인 요청 (j_spring_security_check) 또는 로그 아웃을 위해이 인터셉터가 호출되지 않는다는 것을 (나는 100 % 확실하지 않다는 것을) 알게 될 것이다. 이것은 HandlerInterceptor가 호출되기 전에 적용되는 스프링 보안 필터에서 처리되기 때문입니다.

    컨트롤러를 통해 일부 리소스 (이미지, CSS, JS)를로드하기 때문일 수 있습니다.

  2. ==============================

    2.요청에 name 속성을 두어 보지 않겠습니까?

    요청에 name 속성을 두어 보지 않겠습니까?

  3. from https://stackoverflow.com/questions/8295977/interceptors-in-spring-mvc by cc-by-sa and MIT license