이전까지 spring boot 2.7버전을 이용해 프로젝트를 진행했었기 때문에 3.x는 처음이다.
그러다보니 시작부터 오류가 날 맞이해줬다.
어떤 점들을 고쳐주어야 할까?
// https://mvnrepository.com/artifact/org.hibernate/hibernate-core-jakarta
implementation group: 'org.hibernate', name: 'hibernate-core-jakarta', version: '5.6.15.Final'
// https://mvnrepository.com/artifact/jakarta.persistence/jakarta.persistence-api
implementation group: 'jakarta.persistence', name: 'jakarta.persistence-api', version: '3.2.0-M1'
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
// http 시큐리티 빌더
http
.csrf((csrf) -> csrf
.ignoringRequestMatchers("/api/**", "/api/token/**")
) // csrf를 비활성화할 경로 설정
.httpBasic(withDefaults()) // 기본 http 인증 사용하지 않음
// 세션을 사용하지 않는 상태로 설정
.sessionManagement((session) -> session
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
)
// 특정 경로에 대한 접근 허용 (인증되지 않은 사용자도 접근 가능)
.authorizeHttpRequests((authorize) -> authorize
.requestMatchers(SWAGGER_URI).permitAll()
.requestMatchers(
"/",
"/api/unauth/**",
"/api/token/**",
"/error",
"/swagger-ui/**",
"/v3/api-docs/**"
).permitAll()
// 그 외 모든 요청은 인증 필요
.anyRequest().authenticated()
);
http
// 인증되지 않은 요청에 대한 처리 (401 Unauthorized 응답)
.exceptionHandling(exceptionHandling ->
exceptionHandling.authenticationEntryPoint(
new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED)
)
);
// JWT 인증 필터를 CorsFilter 뒤에 추가
http.addFilterAfter(jwtAuthenticationFilter, CorsFilter.class);
return http.build();
}
// https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-starter-webmvc-ui
implementation group: 'org.springdoc', name: 'springdoc-openapi-starter-webmvc-ui', version: '2.3.0'
// https://mvnrepository.com/artifact/io.swagger.core.v3/swagger-core-jakarta
implementation group: 'io.swagger.core.v3', name: 'swagger-core-jakarta', version: '2.2.19'
@Configuration
public class SwaggerConfiguration {
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.addSecurityItem(new SecurityRequirement().addList("JWT"))
.components(
new Components()
.addSecuritySchemes("JWT",
new SecurityScheme()
.type(SecurityScheme.Type.HTTP)
.scheme("bearer")
.bearerFormat("JWT")
)
)
.info(new Info()
.title("EchoNet Auth API")
.description("에코넷 서비스의 인증 마이크로 서비스입니다.")
.version("1.0.0"));
}
}