2016-11-19 49 views
0

我的Spring Boot應用程序在登錄端點http://server.org/users/login上提供POST請求,這可能會導致401錯誤。在這種情況下,Spring正在對已註冊的錯誤頁面執行另一個POST請求,而我期望始終執行GET請求。是否有可能改變這種行爲?爲什麼Spring會對已註冊的錯誤頁面執行POST請求?

編輯

我使用下面的代碼來配置我的錯誤頁面:

@Bean 
public EmbeddedServletContainerCustomizer containerCustomizer() { 

    return (container -> { 
     ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/weblogin"); 
     ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"); 
     ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500.html"); 

     container.addErrorPages(error401Page, error404Page, error500Page); 
    }); 
} 

當我使用例如打電話http://server.org/users/login一種形式,程序如下:

1)POST請求在http://server.org/users/login

2發給服務器)登錄憑據無效,錯誤頁面401應返回

3)我在這裏不知道接下來會發生什麼,Spring在日誌中告訴我,另一個POST請求執行到/weblogin。如果我不指定自定義錯誤頁,POST請求執行到/error

2016-11-19 20:10:38,827 [http-nio-80-exec-3] DEBUG o.s.web.servlet.DispatcherServlet - DispatcherServlet with name 'dispatcherServlet' processing POST request for [/weblogin] 
2016-11-19 20:10:38,828 [http-nio-80-exec-3] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Looking up handler method for path /weblogin 
+1

你的意思與「春什麼是執行另一個POST請求「?客戶會發出請求。 – Henry

+0

**你可以顯示應用程序設置嗎?**我認爲spring不會調用任何post方法的錯誤,它會返回錯誤頁面,如果有的話。 –

回答

1

我相信你對你的安全配置中使用FromLogin

這將是簡單的,如果你只是:

formLogin() 
     .failureUrl("/my_failure_url") 
     .failureHandler(authenticationFailureHandler); 

使用故障網址導航到您的網址頁面上的錯誤,和/或將在其上從登錄失敗將觸發驗證處理程序編寫。

這個bean應該實現AuthenticationFailureHandler接口,並應使用@Bean@Component被標記爲豆,對豆你所要做的就是實現你的邏輯:

@Override 
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException authEx) 
        throws IOException, ServletException { 
       // TODO Auto-generated method stub  
}