로그인과 인증구현을 위해 spring security를 사용했다.
Spring Security란
Spring Security는 Java 기반의 프레임워크로서, 애플리케이션의 보안을 담당하는 강력한 보안 프레임워크이다.
spring security와 jwt의 통신과정
- 프론트엔드에서 사용자의 로그인 정보 (예: userId, userPw)를 백엔드로 전송한다.
- 백엔드는 받은 로그인 정보를 검증하고, 인증이 성공하면 해당 사용자의 정보로 JWT를 생성 후 프론트엔드로 반환한다.
- 프론트엔드는 받은 JWT를 저장하고, 이후 서버에 요청을 보낼 때마다 해당 JWT를 요청의 헤더에 포함시켜 보낸다.
- 백엔드는 요청을 받을 때 JWT를 검증 후 성공하면 요청에 대한 처리를 진행하고, 결과를 프론트엔드에 응답한다.
Spring Security
의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-security'
Spring Security 설정
검색 당시에는 spring security를 구성하기 위해 'WebSecurityConfigurerAdapter'를 상속받아 인증받는 설정을 작성하라 하였지만 어느 순간부터 deprecated 되어 사용할 수 없었다.
▶ @EnableWebSecurity
어노테이션 추가
기본 설정( SecurityConfig.java)
@Configuration
@EnableWebSecurity
public class SecurityConfig{
@Primary
@Bean
protected AuthenticationManagerBuilder configure(AuthenticationManagerBuilder auth) throws Exception {
// 인메모리 사용자 생성
auth.inMemoryAuthentication()
.withUser("user1")
.password(passwordEncoder().encode("password1"))
.roles("USER");
return auth;
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((request) ->
request
.requestMatchers("/v3/api-docs/**", "/swagger-ui/**").permitAll()//해당경로 url은 인증없이 사용가능
.anyRequest().authenticated())
.formLogin(formLogin->{
formLogin
.usernameParameter("username")
.passwordParameter("password")
.defaultSuccessUrl("/test/get", true);
});
return http.build();
}
@Bean
PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
AuthenticationManagerBuilder
를 이용하여 테스트용 인메모리 사용자를 만들었다. PasswordEncoder()
를 사용하여 비밀번호 설정
SecurityFilterChain
authorizeHttpRequests() : HTTP 요청에 대한 인가 규칙을 구성requestMatchers().permitAll()
: 해당 경로에 대해 모든 사용자가 접근 가능하도록 해준다.anyRequest().authenticated()
: 앞서 설정한 경로를 제외한 모든 경로는 인증을 해야지만 접근이 가능하도록 하였다.
.requestMatchers("/admin/\*\*").hasRole(Role.ADMIN.name())
: admin이라는 역할을 가지고 있어야 해당 경로로 접근 가능
formLogin() : 로그인 폼 설정.usernameParameter("username")
,.passwordParameter("password")
: 로그인 폼에서 사용할 유저네임 파라미터명과 비밀번호 파라미터명 설정.defaultSuccessUrl()
: 로그인 성공시 이동할 경로
이후 실행 시 spring security에서 기본 제공해주는 로그인 폼이 나온다. 이때 테스트용으로 만들어준 사용자의 아이디와 비밀번호를 치면 로그인에 성공하면서 내가 설정해준 '/test/get' url로 이동하게된다.
'SpringBoot' 카테고리의 다른 글
🎯 Spring Security + GitHub OAuth 연동 및 API 호출하기 (0) | 2025.05.12 |
---|---|
[Springboot] #1 웹소켓과 STOMP로 실시간 채팅 구현하기 - spring boot에 웹소켓 연결 (0) | 2024.08.08 |
[Springboot] #2 spring security와 jwt로 인증구현하기 (0) | 2024.06.11 |
[Springboot] swagger 사용하기- 의존성 추가 및 jwt 인증 추가하기 (0) | 2024.05.13 |
[Springboot] api 컨트롤러에서 json형식의 데이터와 MultipartFile 동시에 받기 (0) | 2024.05.13 |