혀비킴
137
2016-03-23 16:36:25
2
1709

DelegatingFilterProxy 와 DispatcherServlet 를 같이 정의할 수 없나요?


안녕하세요? 매번 궁금중이 생길때마다 이곳에서 많은 도움을 얻고 있습니다.

금번에도 궁금한 점이 생겼는데... 역시나 기초적인 내용인 것 같습니다만

마땅히 답을 찾아내지 못해서 이렇게 여쭙니다 ㅜㅠ


궁금한 사항은, 

DelegatingFilterProxy 와 DispatcherServlet 를 web.xml에 같이 정의 할수 없는 것인가 입니다. 

아래 첨부한 web.xml 내용처럼

DispatcherServlet 으로 servlet-context.xml(component-scan 등을 담당)을 로드하고

DelegatingFilterProxy 으로 spring-security를 걸으려고 했습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring/root-context.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/member/*</url-pattern>
  </filter-mapping>
</web-app>
cs


그런데 이렇게 해서 서버를 올리니 ContextLoaderListener(root-context.xml) 올라간 후 

아래와 같이 뜨면서 더이상 DispatcherServlet 부분이 deploy가 안됩니다.


INFO : org.springframework.web.context.support.XmlWebApplicationContext - Closing Root WebApplicationContext: startup date [Wed Mar 23 16:12:17 KST 2016]; root of context hierarchy

WARN : org.springframework.beans.factory.support.DisposableBeanAdapter - Invocation of destroy method 'close' failed on bean with name 'sqlSessionTemplate': java.lang.UnsupportedOperationException: Manual close is not allowed over a Spring managed SqlSession


DispatcherServlet 만 정의했을때에는 정상적으로 servelt-context.xml이 올라가는 것으로 봐선

DelegatingFilterProxy 때문에 안 올라가는 것 같은데... 

제가 찾아본 바로는 DelegatingFilterProxy와 DispatcherServlet을 같이 정의할 경우

겹치는 url부분에 대해서 DelegatingFilterProxy가 필터 부분이므로 우선 적용 된다는 내용은 찾았지만

왜 제 상황에서 DispatcherServlet이 안올라가는지에 대해서는 찾지를 못해서 이렇게 질문을 드립니다.


DispatcherServlet와 DelegatingFilterProxy는 같이 쓸수 없는 것인가요?

그렇다면 DispatcherServlet으로 정의하려는 부분은 ContextLoaderListener 를 통해서 올려야만 하나요?


많이 부족한 질문이지만 

주시는 조언을 바탕으로 더 열심히 공부하도록 하겠습니다.

오늘도 좋은 하루 되십시오^^ 감사합니다. 



0
0
  • 답변 2

  • moonv11
    143
    2016-03-23 16:59:36
    <listener>
         <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
     </listener>
    위 설정을 적용해보세요. 안되면 최범균님의 Spring4 책에 있는 설정을 참고해보세요. git 으로 받을 수 있습니다.
    그리고 dispatcher-servlet 과 DelegatingFilterProxy 는 같이 정의할 수 있습니다.
    0
  • 혀비킴
    137
    2016-04-07 10:59:09

    @moonv11 님. 늦었지만 답변 감사드립니다 ^^ 말씀주신 방법으로 했는데도 처리가 안되었습니다 ㅜㅠ 다른 이유인 것 같은데 아직 원인은 못 찾아냈네요;; 다시 한번 조언 감사드립니다 ㅜㅠ;;

     

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.