2011-11-17 2 views
3

스프링으로 보호 된 URL이 있습니다 (xml을 통해 구성). 그것은 작동합니다. 그러나 AJAX 요청으로 해당 끝점에 도달하려고하면 302 (발견 된) 응답이 표시됩니다. 이것은 내 아약스 호출을 로그인 페이지로 리다이렉션한다 (그래서 나는 HTML을 얻는다). 그러나 클라이언트 응용 프로그램에서 사용할 수있는 로그인 페이지의 URL을 사용하여 401 (인증되지 않은) 응답을 받고 싶습니다. 그래서 사용자를 자바 스크립트로 리디렉션 할 수 있습니다. This question은 내가 원한 것과 가장 가까운 것으로 보이지만 예제가없고 컨트롤러를 다시 변경하는 것이 좋습니다. 저에게 스프링 보안에 401과 URL (또는 다른 유감스러운 오류 메시지와 로그인 페이지의 URL)을 줄 구성이 없습니까?로그인 페이지가있는 곳의 아약스 요청에 스프링 보안을 사용합니다.

+0

당신이 로그인하지 않은 경우 * 응용 프로그램의 모든 * URL은 401을 반환하려면, 또는 당신을합니까 :

package hu.progos.springutils; // imports omitted public class AjaxAwareLoginUrlAuthenticationEntryPoint extends LoginUrlAuthenticationEntryPoint { public void commence(final HttpServletRequest request, final HttpServletResponse response, final AuthenticationException authException) throws IOException, ServletException { if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) { response.sendError(HttpServletResponse.SC_FORBIDDEN, "Access Denied"); } else { super.commence(request, response, authException); } } } 

그런 다음 구현을 사용하는 스프링을 구성 일부 * URL (AJAX 전용)을 사용하여 401을 반환 하시겠습니까? – gutch

답변

15

LoginUrlAuthenticationEntryPoint를 확장 할 수 있습니다. 여기 내 하나

<beans:bean id="authEntryPoint" class="hu.progos.springutils.AjaxAwareLoginUrlAuthenticationEntryPoint" scope="singleton> 
    <beans:property name="loginFormUrl" value="/login.html" /> 
</beans:bean> 

<http entry-point-ref="authEntryPoint"> 
    <!-- your settings here --> 
</http> 
+0

고마워. 이것은 올바른 해결책 인 것처럼 보입니다. 우리는 더 이상 아약스를 사용하지 않기 때문에 이것을 필요로하지 않을 것입니다. – Josh

+1

이것은 필터를 사용하여 모든 요청을 검사하는 것보다 훨씬 훌륭한 해결책입니다. 고마워. –

0

물론이 작업을 수행하는 방법은 백만 가지입니다.

<security:http auto-config="false" entry-point-ref="customAuthEntryPoint"> 
    ... 
    ... 
</security:http> 
: 나는 또한 내가 너무 같은 위의 엔트리 포인트를 매핑 할 수 있습니다 더 조치를 취할 및 보안 자동 구성을 해제

<bean id="customAuthEntryPoint" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint"> 
    <property name="loginFormUrl" value="/your-custom-login" /> 
</bean> 

:하지만 당신의 문제에 대한 간단한 솔루션이 구성 조각입니다

또한 보안 모델이 원하는대로 정확하게 수행되도록 봄 보안 클래스를 재정의합니다. 미끄러운 슬로프이지만 일단 원하는대로 작동하면 컨트롤이 잘됩니다.

+0

은 ' ... ... 와 동일합니다. 나는 그 순간에 _that_을 사용하고있다. – Josh

관련 문제