2016-03-22 12 views
1

私は春のブートプロジェクトを持っています。要求が不正なユーザー資格情報を使用して行われた場合:UsernameNotFoundExceptionが春の起動時に403としてスローされる

catch (RuntimeException ex) { 
     log.error("Error occurred while fetching user {}: {}", securityPrincipal, ex); 
     throw new UsernameNotFoundException("Could not find user: " + securityPrincipal); 
    } 

しかし、最終的にスローされた例外は500

のリンクの数を通過した後、私はそれを見つけたです:

protected AbstractPreAuthenticatedProcessingFilter multiPreAuthenticatedProcessingFilter() throws Exception { 

     MultiPreAuthenticatedProcessingFilter filter = new MultiPreAuthenticatedProcessingFilter(); 

     filter.setAuthenticationManager(authenticationManager()); 
     filter.setPreAuthenticatedPrincipalProviders(preAuthenticatedPrincipalProviders); 
     filter.setCheckForPrincipalChanges(true); 
     filter.setInvalidateSessionOnPrincipalChange(true); 
     filter.setContinueFilterChainOnUnsuccessfulAuthentication(**true**); 

     return filter; 
    } 

continueFilterChainOnUnsuccesfulAuthenticationを変更しますtrueを指定すると、そのままAuthentication例外がスローされます。しかし、これがtrueに変更された後、UsernameNotFoundExceptionが401の代わりに403としてスローされます。

いくつかの基本的なセキュリティ設定がありますか?

+0

これについての回答を得ましたか? – Scooby

+0

@Scooby - Nope。まだ何もありません。 –

+0

本当に401を投げる必要がある場合は、@ controllerAdviceでexceptionHandlerを作成し、必要なステータスコードを投げてください。このリンクにはすべての詳細がありますhttps://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc –

答えて

2

401の代わりに403を指定すると、HTTP仕様に従って絶対的に正しいものとなり、資格情報が提供されていて正しくありません。 401を返すと、ユーザーはアクセス資格情報を指定する必要があることが示されます。

参照:

UPDATE

は実はこれが100%明確な原因ではないRFC 7235は401 が資格場合返されることがありますことを言います提供されたものが正しくありません。