2017-04-11 24 views
2

所以我有一個Spring控制器,使用Spring Security,它被一個簡單的封鎖了它工作正常。投擲BadCredentialsException不重定向回登錄頁面

現在我有一個要求 - 有些人不需要登錄,除非他們在祖母的cookie配方之後。因此,在我的控制器代碼中,我查看了他們之後的配方,如果是cookie,我會拋出BadCredentialsException();

現在我不想拆分控制器方法。這些食譜將在數據庫中,一些(餅乾)將提供給每個人,其他人將需要一個特定的角色。 (例如肉類)

但是,看起來異常正在接受購買一般異常攔截器,並被重新定向到「出事了」頁面。

我希望他們進入登錄頁面,登錄,然後重定向回配方頁面。

<bean id="failureRedirectHandler" class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler"> 
    <property name="useForward" value="true"/> 
</bean> 

同樣,這一切曾與攔截的URL訪問=「IS_AUTHENTICATED_FULLY」但是,爲什麼不會,如果我明確地拋出BadCredentialsException工作?

回答

2

我認爲你想拋出的異常是AccessDeniedException。使用標準配置,如果當前沒有登錄,則會將用戶重定向到登錄頁面。如果登錄,將顯示「拒絕訪問」頁面。您可以自定義此訪問被拒絕的頁面,例如包含一個鏈接以作爲其他用戶登錄。

BadCredentialsException可能不打算在控制器中拋出,但只在內部安全篩選器中,當用戶實際上有輸入某些錯誤憑據。

+0

仍然被錯誤篩選器拾取.. – mmaceachran

+0

這是不正確的。 Sort ...這是要拋出的正確異常,但是,您必須編寫自己的HandlerExceptionResolver,這很好,但useReferer正在丟失。 – mmaceachran