[英]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.