事情要從同事的一個(gè)項(xiàng)目說起法焰,項(xiàng)目中需要集成公司的單點(diǎn)登錄系統(tǒng),但是無論如何都無法跳轉(zhuǎn)到正常的登錄頁面倔毙。相反埃仪,卻始終跳轉(zhuǎn)到另外一個(gè)登錄頁面。
但是代碼卻非常簡單陕赃,簡化一下
@Controller
public class SecurityTestController {
@GetMapping("/myLogin")
public String login() {
return "login";
}
@GetMapping("/")
public String homePage() {
return "homePage";
}
}
發(fā)現(xiàn)無論是"/myLogin"還是"/"都繞不過登錄卵蛉,即使打了斷點(diǎn)也進(jìn)入不了兩個(gè)方法。
由于之前沒有接觸過securtiy么库,還以為是公司另外一個(gè)登錄系統(tǒng)傻丝,讓同事輸入公司域賬戶和密碼,卻怎么也無法進(jìn)入诉儒。最后還是同事通過搜索"please sign in" + "spring"的關(guān)鍵詞才知道這個(gè)是securtiy葡缰。
那既然知道是spring boot 的security,那要如何登錄呢,以及要如何關(guān)閉這個(gè)登錄框呢泛释?
第一個(gè)問題滤愕,如何登錄?
我們從啟動日志中怜校,可以看到有一條這樣的日志
所以间影,這個(gè)就是登錄用到的密碼。那用戶名是什么呢茄茁? 這個(gè)可以進(jìn)入U(xiǎn)serDetailsServiceAutoConfiguration看看究竟魂贬。
然后繼續(xù)進(jìn)入SecurityProperties.User看看。
可以從代碼中看到胰丁,如果不做任何配置随橘,Spring Security的User信息,name是user锦庸,而paasword是UUID机蔗,這個(gè)會在啟動日志中打印。
在登錄框中甘萧,輸入"user" + 日志中的密碼萝嘁,即可正常登錄。
定義用戶名和密碼
對于登錄名和密碼扬卷,可以通過在application.properties文件中指定
spring.security.user.name=admin
spring.security.user.password=admin
第二個(gè)問題牙言,有沒有辦法關(guān)閉登錄?
關(guān)閉自動配置
當(dāng)我們僅僅引入了Spring Securtiy的Starter怪得,就發(fā)現(xiàn)訪問會存在輸入框咱枉。一定是SpringBoot的autoConfig幫我們配置了一些東西。那么可以通過關(guān)閉Securtiy的autoConfig關(guān)閉登錄徒恋。
可以在啟動類上添加
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class})
或者是在application.properties文件中添加
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration,org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration
注意到我的項(xiàng)目中蚕断,除了SecurityAutoConfiguration被排除掉外,還有ManagementWebSecurityAutonConfiguration被排除入挣,這個(gè)類是Actuator引入的亿乳。如果項(xiàng)目中有使用Actuator,那么就需要同時(shí)排除掉ManagementWebSecurityAutonConfiguration径筏。
定制WebSecurityConfigureAdapter關(guān)閉登錄框
@Component
public class MySecurtiyConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// 正常配置其他安全相關(guān)的內(nèi)容
// 將登錄框關(guān)閉
http.formLogin().disable();
}
}
這里推薦使用第二種方式葛假,因?yàn)橐隨pring-security肯定是有業(yè)務(wù)需要的,可以定制化登錄校驗(yàn)信息滋恬。