Diagram

파일별 분석
UiApiApplication
@EnableWebMvc
@EnableWebMvc
public class UiApiApplication {
...
}
- 기능
WebMvcConfigurer 인터페이스를 상속받아 Spring MVC 기능을 커스텀 가능함
Spring Boot에서 기본적인 자동 구성을 다 해줌 → @EnableWebMvc 어노테이션을 사용 → 일부 Spring MVC 관련 부분을 커스텀 가능
SecurityConfig
SecurityFilterChain
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http, AccountRepository accountRepository) throws Exception {
TokenBasedAuthenticationFilter tokenBasedAuthenticationFilter = new TokenBasedAuthenticationFilter(
"/api/**",
authTokenService,
accountRepository
);
http
.cors(cors -> cors.configurationSource(corsConfigurationSource()))
.csrf(csrf -> csrf.disable())
.sessionManagement(configurer -> configurer.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.authorizeHttpRequests(req ->
req
.requestMatchers("/api/auth/login").permitAll()
.anyRequest().authenticated()
.anyRequest().permitAll()
)
.addFilterBefore(tokenBasedAuthenticationFilter, BasicAuthenticationFilter.class)
.formLogin(login ->
login.failureHandler(this::handleLoginFail)
.successHandler((req, res, auth) -> tokenBasedAuthenticationFilter.handleLoginSuccess(res, auth))
.loginPage("/api/login")
)
.logout(configurer ->
configurer.logoutUrl("/api/logout")
.logoutSuccessHandler(tokenBasedAuthenticationFilter::handleLogoutSuccess)
);
return http.build();
}
- 기능
TokenBasedAuthenticationFilter 클래스는 AbstractAuthenticationProcessingFilter 을 상속받은 클래스로써 첫번째 파라미터는 AbstractAuthenticationProcessingFilter 의 첫번째 파라미터(defaultFilterProcessesUrl : 해당 filter를 거칠 대상 url 규칙)임.
따라서 여기에 /api/** 를 넣어주고 /api 하단 엔드포인트 컨트롤러들은 인증이 필요한 api들이고 인증(토큰)을 받을 컨트롤러는 상위 엔드포인트가 /api 외에 다른 곳을 사용하고 있음
들어온 요청이 인증이 된 요청인지 검증하는 filter 클래스임
이걸 BasicAuthenticationFilter 전에 적용될 수 있도록 추가함. 해당 토큰 기반 인증이 성공하면 BasicAuthenticationFilter 는 안거쳐도 되기 때문.
BasicAuthenticationFilter
Authorization: Basic + base64encode(“username:password”) 를 header에 추가해주어 처리하는 인증방식
CORS (Cross-Origin Resource Sharing) : origin이 다른 것에서 요청하는 경우
→ corsConfigurationSource() 메서드의 규칙에 따르도록
CSRF (Cross-Site Request Forgery, 교차사이트 요청 위조): 공격자가 신뢰할 수 있는 다른 사용자를 사칭하여 특정 서버에게 잘못된 공격을 보내는 것
→ 비활성화. 허용하지 않음
SessionCreationPolicy.STATELESS : 세션을 사용하지 않음. 상태를 유지하지 않음. 즉, 각 요청은 독립적으로 실행됨.
AccountController
@GetMapping("/check-account")
public UserInfoDto checkAccount(@UserAccount Account account) {
return accountService.loadSelf(account);
}
@UserAccount 인 커스텀 어노테이션으로 인해 UserAccountHandlerMethodArgumentResolver(HandlerMethodArgumentResolver 상속받은 클래스)에 의해 account에 주입받음. 그 이후에 account내용을 돌려준다.
'JAVA' 카테고리의 다른 글
| 제어의 역전과 의존성 주입 (2) | 2025.07.24 |
|---|---|
| JAVA의 GC (2) | 2025.07.21 |