天天看點

從零學習spring security(一)基本原理了解

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

一、先看看基本原理

從零學習spring security(一)基本原理了解

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接口

從零學習spring security(一)基本原理了解

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接口。

繼續閱讀