2013-01-09 1 views
2

현재 스프링 보안에 의해 보안되는 스프링 MVC 애플리케이션을 작성 중입니다. 로그인의 경우 기본 양식 인증이 사용되며 추가 구성을 추가하지 않았으므로 자격 증명은 http://www.localhost:8080/myWebApp/j_spring_security_check에 게시됩니다.스프링 및 스프링 보안에 대한 서블릿 매핑 변경

지금까지는 좋았지 만 이제 Spring이나 Spring Security의 영향을받지 않는 두 번째 서블릿 (CometD)을 소개했습니다. 이를 위해 servlet-mappings을 변경하여 스프링 및 스프링 보안을 각각 , /app/* 및 다른 서블릿을 cometd/*에 대해 매핑하도록 변경했습니다. 이와

<!-- Spring security --> 
<listener> 
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class> 
</listener> 
<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>/app/*</url-pattern> 
</filter-mapping> 

<!-- Spring MVC --> 
<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>/app</url-pattern> 
</servlet-mapping> 

<!-- CometD --> 
<servlet> 
    <servlet-name>cometd</servlet-name> 
    <servlet-class>org.cometd.server.CometdServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>cometd</servlet-name> 
    <url-pattern>/cometd/*</url-pattern> 
</servlet-mapping> 

문제는이 변경 후 나는 더 이상 로그인 할 수있어 것입니다 다음과 같이 내 web.xml 보인다. 서버가 요청 매핑을 찾을 수 없으며 클라이언트가 NetworkError: 404 Not Found - http://localhost:8080/myWebApp/app/j_spring_security_check이라고 알려줍니다.

이 매핑에 어떤 문제가 있습니까? 설명서에 설명 된대로 //*이 아닌 특정 매핑에 대한 요청 만 처리하도록 Spring과 Spring Security를 ​​어떻게 구성 할 수 있습니까?

미리 감사드립니다.

최저

, 르네는

+0

'springSecurityFilterChain'의 매핑에 오타가 있습니까? '/ app *'(누락 된 슬래시)가 아닌'/ app/*'이어야합니까? – sbordet

+0

@sbordet : 하이 시몬! 오, 네 말이 맞아. 나는 다른 변종을 테스트했다. 불행히도, 나는 아무런 차이가 없습니다. 여전히'j_spring_security_check'을 찾을 수 없습니다. 위의 목록을 편집하여이 문제를 해결했습니다. – rene

답변

1

는 /에 매핑하여 springSecurityFilterChain를 남겨주세요. 보안 설정 변경 :

<http use-expressions="true"> 
    <intercept-url pattern="/cometd/**" access="permitAll" /> 
    <intercept-url pattern="/**" access="hasRole('ROLE_USER')" /> 
</http> 
+0

신속한 응답을 보내 주셔서 감사합니다. 그러나 두 서블릿을 구분하려고하는 이유는 Spring 3.1.x (Cometd 라이브러리에서 필요로하는 비동기 지원에 문제가 있음) 때문입니다. http://stackoverflow.com/a/8655113/1770617은 3.2.x 릴리스에 대해서만 지원 계획이 있음을 나타냅니다. 그래서, 불행히도 이것은 내 문제를 해결하지 못합니다. – rene

+0

Spring 3.2와 함께하는 것이 더 좋을 수도 있습니까? 비동기 지원이 구현되어 있으며 GA가 http://blog.springsource.org/2012/12/13/spring-framework-3-2-goes-ga/ –

+0

예. 그러나 Spring 3.2는 아직 안정적인 릴리스가 아니기 때문에 망설이지 만 나는 그 때까지 기다리기를 좋아한다. 문제를 피하기 위해 매핑을 변경할 수 있다고 생각했습니다. – rene

관련 문제