
Spring boot 3.x 로 적용한 프로젝트에서 iOS와의 협업을 위해 REST API 로 로그인을 구현하는 과정에 공부 내용을 기록해보고자 합니다.
이 단계에서는 WebSecurityConfig 생성하여 시큐리티를 활성화합니다. 또한 REST API 사용을 위해서 시큐리티가 기본 제공하는 로그인 form 을 비활성화하고, 페이지 권한 설정 등을 합니다.
공부 중이므로 틀린 내용, 의견, 질문 있으시면 댓글 달아주시면 감사하겠습니다.

일단 Security가 제공하는 로그인 화면 띄우기
package com.ward.ward_server.security;
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.AbstractHttpConfigurer;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class WebSecurityConfig {
@Bean
public SecurityFilterChain applicationSecurity(HttpSecurity http) throws Exception {
http
.cors(AbstractHttpConfigurer::disable)
.csrf(AbstractHttpConfigurer::disable)
.formLogin(Customizer.withDefaults())
.securityMatcher("/**") // map current config to given resource path
.sessionManagement(sessionManagementConfigurer
-> sessionManagementConfigurer.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
return http.build();
}
}
tip
어차피 쓸 일은 없지만 시큐리티가 제공하는 로그인 폼에 로그인하기 위한 ID: user/Password 는 어플 가동 시 콘솔에 뜨는 Using generated security password 입력하면 됩니다.
이 어노테이션은 Spring Framework에서 사용되며, 해당 클래스가 하나 이상의 빈을 정의하고, 빈 간의 의존성을 설정하는 Java 기반의 설정 클래스임을 나타냅니다. 이 어노테이션이 적용된 클래스는 ApplicationContext에 의해 관리되며, 애플리케이션의 구성과 런타임 동작을 결정하는 역할을 합니다.
이 어노테이션은 Spring Security를 웹 기반 보안 구성에 사용하기 위한 설정을 활성화하는데 사용됩니다. 이 어노테이션을 사용하면 Spring Security의 다양한 웹 보안 기능을 사용할 수 있게 됩니다.
RestAPI 라서 로그인폼x, 권한설정
package com.ward.ward_server.security;
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.AbstractHttpConfigurer;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class WebSecurityConfig {
@Bean
public SecurityFilterChain applicationSecurity(HttpSecurity http) throws Exception {
http
.cors(AbstractHttpConfigurer::disable)
.csrf(AbstractHttpConfigurer::disable)
.securityMatcher("/**") // map current config to given resource path
.sessionManagement(sessionManagementConfigurer
-> sessionManagementConfigurer.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.formLogin(AbstractHttpConfigurer::disable)
.authorizeHttpRequests(registry -> registry // 요청에 대한 권한 설정 메서드
.requestMatchers("/").permitAll() // / 경로 요청에 대한 권한을 설정. permitAll() 모든 사용자, 인증되지않은 사용자에게 허용
.anyRequest().authenticated() // 다른 나머지 모든 요청에 대한 권한 설정, authenticated()는 인증된 사용자에게만 허용, 로그인해야만 접근 가능
);
return http.build();
}
}