내일배움캠프 Spring 24일차 TIL

Skadi·2024년 1월 25일
0

스프링 숙련

1. 필터(Filter)

  • Filter란 Web 애플리케이션에서 관리되는 영역으로 Client로 부터 오는 요청과 응답에 대해 최초/최종 단계의 위치이며 이를 통해 요청과 응답의 정보를 변경하거나 부가적인 기능을 추가할 수 있습니다.
  • 로깅 및 보안 처리에 활용합니다.
    - 인증, 인가와 관련된 로직들을 처리할 수도 있습니다.
    - Filter를 사용하면 인증, 인가와 관련된 로직을 비즈니스 로직과 분리하여 관리할 수 있다는
    장점이 있습니다.
  • Filter는 한 개만 존재하는 것이 아니라 이렇게 여러 개가 Chain 형식으로 묶여서 처리될 수 있습니다.

2. Spring Security

  • Spring 서버에 필요한 인증 및 인가를 위해 많은 기능을 제공

  • 설정

    // Security
    implementation 'org.springframework.boot:spring-boot-starter-security'
  • 기본 예시
package com.sparta.springauth.config;
import org.springframework.boot.autoconfigure.security.servlet.PathRequest;
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.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity // Spring Security 지원을 가능하게 함
public class WebSecurityConfig {
  @Bean
  public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    // CSRF 설정
      http.csrf((csrf) -> csrf.disable());
      http.authorizeHttpRequests((authorizeHttpRequests) ->
      authorizeHttpRequests
      .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() // resource
      .anyRequest().authenticated() // 그 외 모든 요청 인증처리
    );
    // 로그인 사용
    http.formLogin(Customizer.withDefaults());
    return http.build();
  }
}

3. 데이터 검증(Validation)하기

  • 기초제공 Annotation
    - @NotNull : null 불가

    • @NotEmpty : null, "" 불가
    • @NotBlank : null, "", " " 불가
    • @Size : 문자 길이 측정
    • @Max : 최대 값
    • @Min : 최소 값
    • @Positive : 양수
    • @Negative : 음수
    • @Email : 이메일 형식
    • @Pattern : 정규 표현식
  • 설정

       implementation 'org.springframework.boot:spring-boot-starter-validation'
    
  • 예시 코드

package com.sparta.springauth.dto;
import jakarta.validation.constraints.*;
import lombok.Getter;
@Getter
public class ProductRequestDto {
  @NotBlank
  private String name;
  @Email
  private String email;
  @Positive(message = "양수만 가능합니다.")
  private int price;
  @Negative(message = "음수만 가능합니다.")
  private int discount;
  @Size(min=2, max=10)
  private String link;
  @Max(10)
  private int max;
  @Min(2)
  private int min;
}
  • 입력값 검증 Validation
    - @Valid : Bean Validation을 적용한 해당 Object validation 실행
    • @PostMapping("/validation")
      @ResponseBody
      public ProductRequestDto testValid(@RequestBody @Valid ProductRequestDto requestDto) {
      return requestDto;
      }

0개의 댓글