---
# System prepended metadata

title: '[練習範例]spring security & JWT & Swagger'
tags: [security, JWT, spring, Java, Swagger]

---

# [練習範例]spring security & JWT & Swagger

## 範例專案名稱 angular-11-spring-boot-jwt-authenticationExample

### annotation
#### security
##### 登入流程經過的所有事情
* HttpSecurity http : 
    所有請求都會屬於他，就會要先通過security，而要經過哪些認證就可以接在http後面做設定。
* cors() : 
    表示要使用CorsFilter，如果有自己設定一個名為corsFilter的bean，那麼就會使用自己設定的corsFilter，不然在corsConfigurationSource中已經有預設好了。[參考](https://segmentfault.com/a/1190000019485883)
* and() : 
    只是把method接在一起
* csrf() : 
    * 防止CSRF Attacks
    * 使用時機為當你有使用瀏覽器時，就建議使用
    * 做 token 驗證，不用開啟避免 csrf
    * [參考](https://blog.techbridge.cc/2017/02/25/csrf-introduction/)
* exceptionHandling()
    * 通常會這樣使用HttpSecurity.exceptionHandling()，後面就可以再接你想要自己定義的例外處理邏輯，例如exceptionHandling().authenticationEntryPoint(自定義的邏輯)
    * [參考](https://matthung0807.blogspot.com/2020/04/spring-security-custom.html)
* sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
* .antMatchers("/api/auth/**").permitAll().anyRequest().authenticated()
    如果api網址如上的話，直接通過，不需驗證


#### swagger

#### 一般
* <font color="#f00">@Valid : 註釋在方法中要校驗的參數上，用於啟動校驗，可搭配[BindingResult 物件獲取校驗失敗的訊息](https://sites.google.com/im.fju.edu.tw/web/spring-framework/spring-validation)；也可以註釋在成員屬性上，用於進行嵌套驗證。</font>
* @Validated : 對於@Valid 的封裝，由Spring 提供的校驗機制，比@Valid 多了分組功能，但必須配合@Valid 才能進行嵌套驗證。
* @Email : 被註釋的屬性必須是電子信箱格式。
* @Pattern : 被註釋的屬性必須符合指定的正則表示法。
* <font color="#f00">@Null : 被註釋的屬性必須為Null。</font>
* <font color="#f00">@NotNull : 被註釋的屬性必須不為Null。</font>
* <font color="#f00">@NotEmpty : 被註釋的字串不可為空。</font>
* <font color="#f00">@NotBlank : 被註釋的字串非null 且長度必須大於0。</font>
* @Length : 被註釋的字串長度必須在指定的範圍內。
* @Min(value) : 被註釋的屬性必須為一個數字且大於或等於指定的最小值。
* @Max(value) : 被註釋的屬性必須為一個數字且小於或等於指定的最大值。
* @DecimalMin(value) : 被註釋的屬性必須為一個數字且大於或等於指定的最小值。
* @DecimalMax(value) : 被註釋的屬性必須為一個數字且小於或等於指定的最大值。
* @Size(max, min) : 被註釋的屬性必須為一個數字且在指定的範圍內。
* @Digits(integer, fraction) : 被註釋的屬性必須為一個數字且在可接收的範圍內。
* @Range : 被註釋的屬性必須在合適的範圍內。
* @AssertTrue : 被註釋的屬性必須為一個布林值且為true。
* @AssertFalse : 被註釋的屬性必須為一個布林值且為false。
* @Past : 被註釋的屬性必須為一個過去的日期。
* @Future : 被註釋的屬性必須為一個未來的日期。


---
###### tags: `java` `spring` `security` `Swagger` `JWT`