2014-10-09 4 views
0

저는 봄 보안 3.x에 새로운 기능을 제공합니다. 아마도 제 질문은 어리석은 것 같습니다.스프링 보안 3.x + mvc - 예외 처리

사용 사례 : 로그인 페이지, 고객은 다음 몇 가지 오류 메시지가 로그인 페이지에 표시되어야합니다 잘못된 데이터 (예를 들어, 잘못된 (암호)를) 입력

시나리오 : 로그인의 처리는 예를 들어, 내 고객 인증 공급자에 결국 AuthenticationServiceException입니다. 그러면 고객이 다시 로그인 페이지로 리디렉션됩니다.

질문 : 로그인 작업을 위해 @RequestMapping (value = "login") 컨트롤러를 설정했습니다. 예외가 발생했음을 알고 싶습니다. 로그인 액션에 일부 텍스트 (예 : exception.getLocalizedMessage())를 표시하고 싶습니다. 어떻게? Controller가 무언가를 표시하는 것을 알 수 있도록이 AuthenticationServiceException을 잡을 수 있습니까? 인증 실패가있을 때

예외는 이름 SPRING_SECURITY_LAST_EXCEPTION를 사용하여 모델에 저장됩니다, 당신에게

+0

스프링 보안은 이미이 문제를 처리하고 이미 지역화 된 오류 메시지를 표시합니다. 왜 다시 그것을 재창조해야합니까? 또한 해커가 계속 진행할 수있는 힌트 인 잘못된 정보 (예 : 사용자 이름 * 또는 * 잘못된 비밀번호 *)를 정확하게 알려주지 않으려합니다. * 알 수없는 사용자 이름/암호 조합 *과 같은 일반 오류 메시지를 원합니다. –

+0

어떻게 액세스 할 수 있습니까? 예외가 발생했다는 것을 어떻게 알 수 있습니까? 이것은 봄 보안으로 어디에서 처리됩니까? – squirrelInTheBarel

답변

0

감사드립니다. 당신은 예를 들어 다음과 같은 것은 속도보기에서이다, 로그인 페이지에서 예외 메시지를 표시 할 수 있습니다

#if ($SPRING_SECURITY_LAST_EXCEPTION) 
<p class="error">${SPRING_SECURITY_LAST_EXCEPTION.message}</p> 
#end 
+0

다음과 같이 사용합니다. Object lastException = webRequest.getAttribute (WebAttributes.AUTHENTICATION_EXCEPTION, WebRequest.SCOPE_SESSION); 정말 어리 석다. 예외는 세션에 남아 있습니다. 심지어 로그인 페이지 오류가 새로 고쳐지기까지했습니다. – squirrelInTheBarel

+0

@squirrelInTheBarel은 독자적인 대답으로 접근 방식을 자유롭게 게시 할 수 있습니다. – holmis83

0

내가 컨트롤러에서 다음을 사용

Object lastException = webRequest.getAttribute(WebAttributes.AUTHENTICATION_EXCEPTION, WebRequest.SCOPE_SESSION); 
if (lastException != null) { 
    .... 
} 

그럼 내가 지난 예외에 대한 액세스가 있습니다. 하지만이 전체적인 개념은 다소 바보입니다. 이 예외는 세션에 남아 있으므로 사용자가 새로 고침 할 때마다 표시됩니다. 더 나은 솔루션이 있어야합니다 .....

관련 문제