이전 글에서는 Spring Security를 간단하게 사용해보았습니다.
하지만 매번 csrf 토큰을 확인해줘야 하는 문제와 사용자의 패스워드가 그대로 노출되는 문제가 있었습니다.
개발 환경
- Spring Boot 3.2.4
- spring-boot-starter-security
- spring-boot-starter-oauth2-resource-server
config/security/SecurityConfig.java
...
@Bean
SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
// CORS CSRF 미사용처리
.cors(AbstractHttpConfigurer::disable)
.csrf(AbstractHttpConfigurer::disable)
// 인증 활성화
.authorizeHttpRequests(auth -> auth
.anyRequest().authenticated())
// Form Login 활성화
.formLogin(Customizer.withDefaults())
// 동일도메인 iframe 접근 활성화
.headers(header -> header
.frameOptions(HeadersConfigurer.FrameOptionsConfig::sameOrigin))
)
.build();
}
...
CORS와 CSRF를 비활성화 처리를 했습니다
FilterChain을 새롭게 구성하면 인증과 Form Login 활성화가 필요합니다.
동일 도메인 iframe 접근 활성화 주석된 부분을 포함하지 않고 h2-console에 접속하면
로그인 페이지는 보이겠지만 로그인을 성공하면 아래 페이지처럼 보일것입니다
위 처럼 뜨는 이유는 h2-console이 iframe을 사용하는데
spring security는 Clickjacking 공격을 막기위해 기본적으로 비활성화되어 있다고 합니다
https://stackoverflow.com/a/28649205
위 까지만 설정을 하고 브라우저를 통해 테스트를 하면 정상적으로 동작하는 것을 확인할 수 있습니다.
POSTMAN으로 테스트 하실때는
먼저 아래 사진처럼 POST 요청으로 로그인을 진행해주세요
그리고 나서 다른 API를 테스트 하시면 정상적으로 동작할겁니다.
POSTMAN도 내부적으로 쿠키를 관리하고 있어서
로그인 요청시 Header 에 JSESSIONID 정보를 담아서 전송하고
로그인이 성공하면 이후의 API 요청은 정상적으로 처리됩니다
주의: 부정확함. securityFilter 빈을 별도로 등록하면 기본값으로 세션인증방식으로 처리되는 것 같습니다.
다음글에서는 JWT 를 이용한 인증을 해보겠습니다
'JAVA > SPRING' 카테고리의 다른 글
Spring Boot 3 Tutorial - 6 Login (0) | 2024.04.25 |
---|---|
Spring Boot 3 Tutorial - 5 Security(3) JWT (0) | 2024.04.23 |
Spring Boot 3 Tutorial - 5 Security(1) (2) | 2024.04.12 |
Spring Boot 3 Tutorial - 4 QueryDsl (0) | 2024.04.08 |
Spring Boot 3 Tutorial - 3 DBMS switch (0) | 2024.04.04 |