iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0
Software Development

Spring boot 從零到寫出ChatGPT系列 第 23

Spring boot 從零開始 (23) - Spring security 介紹 & 基本配置

  • 分享至 

  • xImage
  •  

Hello大家好 👋 相信這個周末看到好幾個知名大公司都陸續被駭客攻擊的新聞後,就可以知道安全性真的很重要,所以我們今天就來跟大家介紹怎麼應用Spring security來協助我們進行各種認證(authentication)與授權(authorization)的控管/images/emoticon/emoticon30.gif

(一) 安裝

  • pom.xml新增dependency
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-security</artifactId>
  </dependency>

(二) spring security 開發

  1. 先在src底下建立一個config的資料夾,這樣可以將我們針對application設定的config都放在該資料夾中
  2. 建立一個SecuityConfig.class,並加上@EnableWebSecurity@Configuration,這樣我們就可以讓我們的Application套用這個設定
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configurers.AuthorizeHttpRequestsConfigurer;
import org.springframework.security.web.SecurityFilterChain;

@EnableWebSecurity
@Configuration
@RequiredArgsConstructor
public class SecurityConfig {
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests(new Customizer<AuthorizeHttpRequestsConfigurer<HttpSecurity>.AuthorizationManagerRequestMatcherRegistry>() {
@Override
public void customize
(AuthorizeHttpRequestsConfigurer<HttpSecurity>.AuthorizationManagerRequestMatcherRegistry authorizationManagerRequestMatcherRegistry) {
                        authorizationManagerRequestMatcherRegistry
                        //指定上述匹配規則中的url,允許所有用戶接可以訪問,不需要進行身份驗證
                                .requestMatchers("/internal/**").permitAll()
                        //需要身分驗證的路徑
                                .requestMatchers("/external/**").authenticated();
                    }
                })
                .httpBasic(Customizer.withDefaults());
        return http.build();
    }
}

  • 在這邊如果是需要身分驗證的路徑,我們採用了最常見的httpBasic()

接著我們可以依照上面設定的url來建立看看API,並用postman測試結果

建立一個 /internal/**的API

    @GetMapping("internal/hello")
    public ResponseEntity<String> testHello() {
        return ResponseEntity.ok("Hello World !!!");
    }

接著我們用postman來測試該API,我們會發現不需要任何的驗證就可以取得結果

https://ithelp.ithome.com.tw/upload/images/20241007/20112118AoJB0zY4GW.png

建立一個 /external/**的API

    @GetMapping("external/hello")
    public ResponseEntity<String> testHello() {
        return ResponseEntity.ok("Hello World !!!");
    }

接著我們用postman來測試該API,我們會發現他會出現身分驗證失敗的錯誤

https://ithelp.ithome.com.tw/upload/images/20241007/20112118I5Ocht9YXY.png

這樣我們就輕鬆完成最簡易的安全配置了,明天我們在繼續/images/emoticon/emoticon01.gif

參考來源

spring-security官網


上一篇
Spring boot 從零開始 (22) - 來撰寫Unit Test 之Mockito介紹
下一篇
Spring boot 從零開始 (24) - Spring security 身分驗證Model建立
系列文
Spring boot 從零到寫出ChatGPT30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言