最近打算學一套安全架構,目前由于springboot、springcloud的火熱,是以springsecurity是第一選擇。
一、先看看基本原理

spring security 實際上就是通過一系列的過濾器對請求進行過濾,最終對不合法的請求抛出相應的異常。
二、接下來看看具體實作
1)引入security的依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2)編寫個測試用的接口
@GetMapping("/user")
public String getUser(){
return "this is security";
}
3)通路看看效果
通路這個user接口的時候發現請求被攔截了,需要輸入使用者名和密碼,spring security預設使用者名是user,每次啟動項目的時候會再控制台列印,輸入使用者名和密碼後重新跳轉到user接口
4)自定義使用者名和密碼
在實際應用中,以上肯定是不能滿足需求的,我們需要從資料庫進行驗證使用者名和密碼。
@Component
@Slf4j
public class MyUserDetailService implements UserDetailsService {
// 加密處理
@Autowired
private PasswordEncoder passwordEncoder;
@Override
public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {
// 這一塊用來處理使用者合法性,如從資料庫裡驗證使用者
log.info("登入的使用者名={}",userName);
return new User(userName,passwordEncoder.encode("123456"),true,true,true,true, AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));
}
}
@Configuration
public class BrowserConfig extends WebSecurityConfigurerAdapter {
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.formLogin() //表單送出的所有請求都進行身份認證
.and()
.authorizeRequests()
.anyRequest()
.authenticated();
}
}
UserDetailsService 是security封裝好的處理使用者認證邏輯的接口。
WebSecurityConfigurerAdapter 是攔截器,我們重寫了configure方法,用來對http請求進行認證和授權。
測試一下,随便輸入一個使用者名,密碼輸入123456,然後會跳轉到user接口。