簡體   English   中英

Spring Security表單登錄

[英]Spring Security form login

我在src / main / webapp / my-login.html下有帶有自定義登錄頁面的Spring Boot應用程序。 我將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到/ my-login返回我的HTML頁面? 我知道它的名稱是“ my-login.html”,而不是簡單的“ my-login”,但是刪除.html擴展名會使Chrome變得瘋狂(嘗試下載文件...)。 我嘗試將HTML文件(帶有或不帶有擴展名)放在src / main / webapp或src / main / resources / static下。

另外請注意,我沒有使用Thymeleaf,目標前端框架將是AngularJS。 我對優雅的解決方案也很感興趣(我想我想要實現的目標非常簡單)-我認為我已使它與loginPage(“ / my-login.html”)一起使用,但是REST端點似乎不正確。

您可以設置一個視圖控制器以將請求轉發到my-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);
    }

}

如果要將AngularJS用於前端應用程序,則創建API身份驗證終結點可能是最好的解決方案。 您可以使用任何希望的身份驗證機制,但是簡單的基本身份驗證(可選地帶有一些持久性令牌)可以很好地啟動。 因此,您將擁有一個特殊的端點,例如:

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

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

我對formLogin屬性進行了更多操作,然后獲得以下解決方案:

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

這樣,我將HTML文件作為登錄頁面返回,並將一個干凈的POST端點用於傳遞登錄數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM