iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0

SecurityConfiguration

@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfiguration {
    private final AuthenticationProvider authenticationProvider;
    private final JwtAuthenticationFilter jwtAuthFilter;
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws  Exception {
        http
                .csrf()
                .disable()
                .authorizeHttpRequests()
                .requestMatchers("/api/v1/auth/**")
                .permitAll()
                .anyRequest()
                .authenticated()
                .and()
                .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authenticationProvider(authenticationProvider)
                .addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class);
        return http.build();


    }
}

上面的配置步驟解釋:

  1. 禁用CSRF保護:由於JWT是無狀態的,我們通常會禁用CSRF保護,以簡化API設計。
  2. 請求授權:
    • 我們使用 requestMatchers() 方法來規定哪些路徑不需要身份驗證,比如 /api/v1/auth/** 。
    • 對於其他任何請求,則要求用戶必須先通過身份驗證。
  3. 會話管理:設置SessionCreationPolicy為STATELESS,這意味著不會在服務器保留任何用戶的會話。
  4. 身份驗證提供者:我們可以自定義身份驗證機制,如使用用戶名和密碼或其他驗證方式。
  5. JWT過濾器: addFilterBefore 方法可用來在 Spring Security 的過濾器鏈中插入JWT過濾器,使其在用戶名和密碼驗證之前進行JWT的驗證。

上一篇
Day 15 AuthenticationFilter 2
下一篇
Day 17 Jwt Security 2
系列文
Spring Boot微服務架構:API設計與實現28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言