2017-09-19 189 views
0

我使用Spring Security的4 我有我的配置,如:登錄不登錄表單工作

http 
    .requiresChannel() 
     .and() 
    .authorizeRequests() 
     .antMatchers("<URLS>").hasAnyAuthority(CUSTOMER.toUpperCase(), BRANCH.toUpperCase()) 
     .and() 
    .authorizeRequests() 
     .anyRequest().authenticated() 
     .and() 
    .formLogin() 

這個配置,我能夠訪問Spring的登錄網址:

localhost:9080/contextpath/login?username=BNH123456&password=pass 

但現在當我使用登錄表單配置如下:

http 
    .requiresChannel() 
     .and() 
    .authorizeRequests() 
     .antMatchers("<URLS>").hasAnyAuthority(CUSTOMER.toUpperCase(), BRANCH.toUpperCase()) 
     .and() 
    .authorizeRequests() 
     .anyRequest().authenticated() 
     .and() 
    .formLogin() 
     .loginPage(journey.equalsIgnoreCase("customer") ? "/" : "/#!/login") 

我無法訪問Spring的登錄URL。它說:

錯誤404

是否有必要定義一個定製的控制器時,我定義登錄表單?

我想使用我的自定義登錄表單,但它使用Spring的登錄URL。 (如果我使用郵遞員發出登錄請求,它應該進行身份驗證。)

任何人都可以請指導。

+1

'#'將不會在服務器上接收那些客戶端錨點並不會被髮送到服務器。 –

+0

我們在前端使用角度,我們有兩種類型的旅程。對於客戶旅程,我的起始頁面是「/」,但對於員工旅程,我的起始頁面是「/#!/ login」。 angular將用戶名和密碼發送到後端進行驗證。當我沒有把「loginform」工作正常,但是當我添加時,相同的URL localhost:9080/contextpath/login?username = BNH123456&password = pass 停止工作。 – kenthewala

+1

爲什麼它應該不同...只需調用相同的入口點即可。沒有你的首頁不是'/#!/ login',它仍然是'/'。 Angular分析'#!/ login'部分。 –

回答

0

如果更改了登錄頁面的URL,你也改變登錄的網址,看到FormLoginConfigurer#loginPage

影響其他違約

更新這個值,也影響了一些其他默認值。例如,以下是僅指定formLogin()時的默認值。

  • /登錄GET - 登錄表單
  • /登錄POST - 過程的憑據,如果有效驗證用戶
  • /密碼錯誤GET - 重定向這裏驗證嘗試失敗
  • /登錄?註銷GET - 後如果「/身份驗證」被傳遞給此方法更新它的默認值成功註銷

重定向這裏,如下圖所示:

  • /驗證GET - 登錄表單
  • /驗證POST - 過程的憑據,如果有效驗證用戶
  • /驗證錯誤GET - 重定向這裏驗證嘗試失敗
  • /驗證?註銷GET - 成功登錄後出
  • 重定向這裏

解決辦法有兩個: