@WebFilter
annotation을 통해 등록 된 필터 클래스 'MyFilter'가 있습니다. doFilter()
에서 나는 내 프로젝트에서 만든 MyBeanClass
의 객체가 필요합니다. new 연산자를 통해이 객체를 만들고 Tomcat에서 프로젝트를 실행하면 필터가 한 번 등록되어 제대로 작동하는 것을 볼 수 있습니다. 나는 MyFilter
클래스 위 @Component
주석을 추가하여 객체를 자동으로 묶어, 다음 바람둥이에서 프로젝트를 실행하려고하면스프링 필터에 @WebFilter 및 @Component 주석 추가하기
그러나, 나는 필터가 두 번 호출됩니다 twice.The doFilter()
등록되어 있는지 확인하고 두 번째 doFilter()
입니다 MyBeanClass
이라는 개체는 초기화되지 않고 null
입니다. 따라서 NullPointerException
.
나는 봄 개까지 의존성 주입을 떠날 필요하므로 객체를 autowiring은 것은 필요하신 우려가있다 -
- 는 왜 두 번 등록 된 필터입니다.
- 왜 개체가 두 번째로 null입니까?
- 올바른 방법은 무엇입니까? MyFilter.java : 여기
샘플 코드입니다
@Component
@WebFilter(filterName = "RestFilter", urlPatterns = { "/*" })
public class MyFilter implements Filter {
@Autowired
MyBeanClass myBeanClass;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//this is how I know that filter is registered twice.
System.out.println("this is init.");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
if (myBeanClass.isValidRequest()) {
System.out.println("Let this request pass");
chain.doFilter(request, response);
}
else{
System.out.println("Should not let pass this request");
}
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
MyBeanClass.java
@Component
public class MyBeanClass{
Boolean valid = false;
public boolean isValidRequest(){
//some code
}
//
//Other piece of code
//
}
나는 스프링 프레임 워크에 새로운 오전, 최근 프로젝트에서 작업을 시작했다 봄. 내가 잘못한 것을 수정하면 나에게 정정 해주세요. 또는 이것을 수행하는 또 다른 방법이 있다면, 저를 올바른 자원으로 안내하십시오.
작동하지 않습니다 ('@ WebFilter' 때문에). 스프링에 의해 등록 된 다른 인스턴스는 자동 배선 ('@ Component' 때문에)을받을 것입니다. 하나 이상의 주석을 모두 사용하십시오. –
답장을 보내 주신 M. Deinum에게 감사드립니다. @WebFilter를 통해 필터를 등록 할 필요가 있습니다. 제가 작업하고있는 프로젝트에서 따라야 할 컨벤션입니다.하지만 Autowiring이 이루어지지 않을 것입니다. 둘 다 달성 할 수있는 방법이 있습니까? – raviiii1
@WebFilter로 등록하지 않거나 자동 배선을 사용하지 마십시오. 그것이 봄에 관리되지 않는 스프링은 주사를하지 않을 것이므로 수동으로 직접 주입해야합니다. –