[SPRING] Spring과 DelegatingFilterProxy에 @Autowired
SPRINGSpring과 DelegatingFilterProxy에 @Autowired
나는 스프링 빈을 필터에 주입하려고 시도하지만 작동하게 만들 수는 없다.
주입 된 bean은 항상 "null"입니다. 필자는 컨트롤러와 HandlerInterceptor에서이 동일한 bean을 autowiring하는 데 성공하므로 올바르게 주석 처리됩니다.
필터 클래스는 나머지 컨트롤러의 기본 패키지 아래에 있습니다.
이것은 내 web.xml의 관련 부분입니다.
<filter>
<filter-name>CheckSession</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>CheckSession</filter-name>
<url-pattern>/panel/*</url-pattern>
</filter-mapping>
이것은 필터의 코드입니다.
@Component
public class CheckSession extends OncePerRequestFilter implements Filter {
@Autowired private Usuario usuario;
@Override
protected void doFilterInternal(
HttpServletRequest request,
HttpServletResponse response, FilterChain chain)
throws ServletException, IOException {
// always null
System.out.println("autowired " + usuario);
chain.doFilter(request, response);
}
}
필터는 모든 요청에서 트리거됩니다.
이것들은 "Usuario"빈에있는 주석들이다.
@Component
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)
public class Usuario implements java.io.Serializable { ... }
내가 뭘 놓치고 있니? 감사!
해결법
-
==============================
1.CheckSession bean의 이름을 명시 적으로 정의하고 도움이되는지 확인하십시오.
CheckSession bean의 이름을 명시 적으로 정의하고 도움이되는지 확인하십시오.
@Component("CheckSession") public class CheckSession extends OncePerRequestFilter implements Filter { @Autowired private Usuario usuario; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { // always null System.out.println("autowired " + usuario); chain.doFilter(request, response); } }
핵심 부분은 다음과 같습니다. @Component ( "CheckSession")
그리고 길을 더 일찍 처리하기가 더 쉽도록하기 위해 나는 이름을 붙이고 이름을 "checkSession"으로 바꿉니다 (첫 번째 문자는 소문자로 만드십시오).
-
==============================
2.스프링 3.2.6에서 작동 :
스프링 3.2.6에서 작동 :
첫 번째 : 구성 요소 이름 지정, 2 가지 옵션 - 하나만 수행
옵션 A : 주석 - 구성 요소 검사가 사용 가능하다고 가정합니다.
@Component("checkSession") public class CheckSession extends OncePerRequestFilter { @Autowired Usuario usuario; @Override protected void doFilterInternal(final HttpServletRequest request, final HttpServletResponse response, final FilterChain chain) throws ServletException, IOException { // not null System.out.println("autowired " + usuario); chain.doFilter(request, response); } }
옵션 B : applicationContext.xml을 통한 와이어 빈
<bean id="checkSession" class="com.example.filter.CheckSession"></bean>
둘째 : Spring DelegatingFilterProxy를 연결합니다.
<filter> <filter-name>checkSession</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>checkSession</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
주 : bean 이름은 filter-name으로 참조됩니다.
from https://stackoverflow.com/questions/9690754/spring-and-autowired-on-a-delegatingfilterproxy by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring Security 3 - 항상 오류 302를 반환합니다. (0) | 2019.04.05 |
---|---|
[SPRING] 스프링 데이터 : 관리되지 않는 유형 : class java.lang.Object (0) | 2019.04.05 |
[SPRING] 스프링 부트 이해 @Autowired (0) | 2019.04.05 |
[SPRING] @SpringBootApplication을 STS의 유형으로 확인할 수 없습니다. (0) | 2019.04.05 |
[SPRING] Spring JUnit 테스트에서 자동 모의 인스턴스 생성 (0) | 2019.04.05 |