2017-03-09 156 views
0

我有src/main/webapp/my-login.html下的自定義登錄頁面的Spring Boot應用程序。我配置的Spring Security如下:Spring Security表單登錄

@Configuration 
@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests().anyRequest().authenticated().and() 
       .formLogin().loginPage("/my-login").permitAll().and() 
       .csrf().disable(); 
    } 
} 

我怎樣才能讓HTTP GET來/我登錄回到我的HTML頁面?我知道它被命名爲「my-login.html」而不是簡單的「my-login」,但是刪除.html擴展名會使Chrome變得瘋狂(它會嘗試下載文件...)。我嘗試在src/main/webapp或src/main/resources/static下放置HTML文件(帶或不帶擴展名)。

另請注意我沒有使用Thymeleaf,目標前端框架將是AngularJS。我也對優雅的解決方案感興趣(我認爲我想實現的目標非常簡單) - 我認爲我使用loginPage(「/ my-login.html」)工作,但REST端點看起來不正確。

回答

3

您可以設置一個視圖控制器將請求轉發到我的-的login.html ...

@Configuration 
public class MvcConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addViewControllers(ViewControllerRegistry registry) { 
     registry.addViewController("/my-login").setViewName("forward:/my-login.html"); 
     registry.setOrder(Ordered.HIGHEST_PRECEDENCE); 
    } 

} 
+0

工作,謝謝。我不確定這是否是最乾淨的解決方案,但我非常喜歡它+它直接回復了我的問題=我將它標記爲我的工作解決方案:) – kabeen

1

如果您希望將AngularJS用於前端應用程序,那麼創建API認證端點可能是最佳解決方案。你可以使用你想要的任何認證機制,但簡單的基本認證(可選地帶有一些持久性標記)對於開始來說可以。因此,您將擁有一個特殊的端點,例如:

/token POST受基本身份驗證保護,並在成功時返回一個令牌對象,該對象稍後可用於所有請求(例如在請求標頭中)。

您的AngularJS將是一個完全獨立的應用程序,它只消耗您的API端點。此應用程序可以選擇將身份驗證令牌保留在客戶端會話中,以便用戶在每次打開應用程序時都不必輸入憑據。此外,這是一個非常乾淨的解決方案,可以輕鬆地進行單獨測試。另外,這種方式前端應用程序可以由其他團隊開發,不需要任何有關Spring技術細節的知識。

1

我打得多一點與formLogin性能,得到了該解決方案:

formLogin().loginPage("/my-login.html").loginProcessingUrl("/my-login").defaultSuccessUrl("/my-home.html", true).permitAll() 

通過這種方式,我將HTML文件作爲登錄頁面返回,並使用乾淨的POST端點傳遞登錄數據。