[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.먼저 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.요청에 name 속성을 두어 보지 않겠습니까?
요청에 name 속성을 두어 보지 않겠습니까?
from https://stackoverflow.com/questions/8295977/interceptors-in-spring-mvc by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] web.xml없이 웹 애플리케이션에 Struts2를 추가하는 방법은 무엇입니까? (0) | 2019.05.20 |
---|---|
[SPRING] 스프링 부트 액츄에이터 상태 표시기 (0) | 2019.05.20 |
[SPRING] Hibernate를 통한 엔티티 저장시 org.hibernate.WrongClassException (0) | 2019.05.20 |
[SPRING] 이 Oracle 연결 오류가 발생하는 이유는 무엇입니까? ORA-12519, TNS : 적절한 서비스 처리기가 없습니다. (0) | 2019.05.20 |
[SPRING] @RequestMapping의 어떤 param이 호출되는지를 아는 법 (0) | 2019.05.20 |