2013-03-23 2 views
1

내가 바람둥이로 봄 보안 릴리스 3.1.3로 스프링 MVC를 사용하고 404을 반환 7.0.37은/j_spring_security_check

나는 2 개 보안 필터 체인, BasicAuthentication 선택 하나를 구성해야 하나는 FormBasedAuthentication 용입니다.

<beans:beans ...> 
... 

<!-- ....................... --> 
<!-- The Gui is secured here --> 
<!-- ....................... --> 
<http auto-config="true" use-expressions="true" pattern="/gui/**"> 
    <intercept-url pattern="/gui/login**" access="isAnonymous()"/> 

    <form-login login-page="/gui/login" default-target-url="/gui/welcome" 
       authentication-failure-url="/gui/loginfailed" /> 

    <logout logout-success-url="/gui/logout" /> 

    <intercept-url pattern="/welcome*" access="hasRole('een_admin')" /> 
    <intercept-url pattern="/mandantAdmin/**" access="isAuthenticated()"/> 
    <intercept-url pattern="/standortAdmin/**" access="isAuthenticated()"/> 
    <intercept-url pattern="/ereignisse/**" access="isAuthenticated()" /> 
    <intercept-url pattern="/tickets/**" access="isAuthenticated()"/> <!-- requires-channel="https" -->   
    <intercept-url pattern="/**" access="hasRole('een_admin')"/> 
</http> 

<!-- ................................. --> 
<!-- The Service Methods are secured here --> 
<!-- ................................. --> 
<http use-expressions="true" > 
    <http-basic /> 
    <logout logout-url="/resources/j_spring_security_logout"/> 

    <intercept-url pattern="/service/ticketManagement/**" access="isAuthenticated()"/> 
    <intercept-url pattern="/service/standortKonfig/**" access="isAuthenticated()"/> 
    <intercept-url pattern="/service/ereignisStorage/**" access="isAuthenticated()"/> 

</http> 
<debug/> 


<authentication-manager> 
    <authentication-provider> 
    <password-encoder hash="sha-256"/> 
    <user-service> 
     <user name="123" password="asdf" authorities="een_admin" /> 
    </user-service> 
    </authentication-provider> 
</authentication-manager> 
</beans:beans> 

내 web.xml 파일은 다음과 같다 : 여기

내 스프링 security.xml 파일입니다

<servlet> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/mvc-dispatcher-servlet.xml, 
     /WEB-INF/spring-security.xml 
    </param-value> 
</context-param> 

<!-- ........................................................................... --> 
<!--        Spring Security        --> 
<!-- ........................................................................... --> 
<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>/*</url-pattern> 
</filter-mapping>  

형태 기반의 보호 자원 중 하나에 접근 구성된 사용자 정의 로그인 양식에 성공적으로 위임됩니다. 하지만 내 자격 증명을 입력 한 후 나는이 "j_spring_security_check"한다는 404 오류가 (이 URL을 사용하고 : "http://127.0.0.1:8080/webapp/j_spring_security_check") 찾을 수 없습니다 얻을 여기

은 일부 로그입니다

Request received for '/gui/login': 

[email protected] 

servletPath:/gui/login 
    pathInfo:null 

    Security filter chain: [ 
     SecurityContextPersistenceFilter 
     LogoutFilter 
     UsernamePasswordAuthenticationFilter 
     BasicAuthenticationFilter 
     RequestCacheAwareFilter 
     SecurityContextHolderAwareRequestFilter 
     AnonymousAuthenticationFilter 
     SessionManagementFilter 
     ExceptionTranslationFilter 
     FilterSecurityInterceptor 
    ] 
    Request received for '/j_spring_security_check': 

    [email protected] 

    servletPath:/j_spring_security_check 
    pathInfo:null 

    Security filter chain: [ 
     SecurityContextPersistenceFilter 
     LogoutFilter 
     BasicAuthenticationFilter 
     RequestCacheAwareFilter 
     SecurityContextHolderAwareRequestFilter 
     AnonymousAuthenticationFilter 
     SessionManagementFilter 
     ExceptionTranslationFilter 
     FilterSecurityInterceptor 
    ] 

    01:06:06,345 WARN http-apr-8080-exec-3 servlet.PageNotFound:1080 - No mapping found for HTTP request with URI [/webapp/j_spring_security_check] in DispatcherServlet with name 'mvc-dispatcher' 

    In access_logs: 
    "POST /webapp/j_spring_security_check HTTP/1.1" 404 949 

참고 UsernamePasswordAuthenticationFilter 누락 때 방향 전환.

첫 번째 요소에서 패턴 속성 pattern = "/ gui/**"을 제거하고 두 번째 요소를 주석 처리하면 (그렇지 않으면 요격 패턴과 관련된 문제가 발생합니다) 다시 작동합니다.

간략히 : http 요소 j_spring_security_check에 패턴 속성을 추가 할 수 없습니다.

무엇이 잘못 되었나요? 아무도 도와 줄 수 있습니까?

답변

3

당신은 이후 그들은 것입니다, 당신은 http 블록 내에서 정의 URL이 적용되지 않습니다 같은 /welcome*pattern 특성에 하지 상대, 당신은 시작에 대한 그래서 모든 intercept-url 패턴 것을 깨달을 필요 /gui으로 시작하는 URL에 대해서만 활성화되므로 절대로 일치하지 않습니다. /gui/welcome이어야합니다.

로그인 양식을 제출하는 URL의 어도비는 form-login이어야합니다. 귀하의 경우 그것은 /gui/** 필터 체인 내에 있으므로 /j_spring_security_check에 대한 요청은 결코 일치하지 않습니다.

로그인 양식의 URL을 /gui으로 변경해야합니다. login-processing-url을 설정하여 필터가 응답하는 URL을 수정할 수도 있습니다. 예 :

<form-login login-processing-url="/gui/login.do" login-page="/gui/login" default-target-url="/gui/welcome" authentication-failure-url="/gui/loginfailed" /> 

(스프링을 전혀 언급하지 않은 것을 선택하는 것이 좋습니다.)

여기서는 아무 것도하지 않고 사람을 혼란스럽게하기 때문에 auto-config 속성을 제거해야합니다.

+0

정말 고마워, 너 정말 이걸 도와 줬어! – mulrich

+0

login-processing-url에 "/ gui/j_spring_security_check"을 사용했습니다. login.jsp와 동일한 값으로 데이터를 보내면 이제 작동합니다. 이 로그인을 사용하는 방법을 알지 못했습니다.do "를 실행하면"j_spring_security_check "명령이 실행됩니다. – mulrich

+1

'login-processing-url'은 필터가 응답하는 URL을 설정하고 로그인 양식의 URL과 일치하면 '/ j_spring_security_check'는 단지 기본값입니다. –