-
[Spring Boot] 스프링 시큐리티네이버클라우드 캠프 | BE/Spring 2023. 6. 26. 00:16728x90
이번 블로그 글에서는 로그인/로그아웃 기능을 구현하며 필수적으로 알아야 하는 Spring Security에 대해 알아보도록 하겠습니다.
1. Spring Security
Spring Security(스프링 시큐리티)는 웹 어플리케이션의 보안을 위한 강력한 프레임워크입니다.
웹 어플리케이션에서 필요한 인증, 권한 부여를 비롯해 주요 보안 기능을 제공해, 어플리케이션을 안전하게 만들 수 있습니다.
Spring Security는 아래와 같은 특징을 가지고 있습니다.
1. 다양한 인증 방법 지원: *Form-Login, *LDAP, *OAuth 등 다양한 인증 방법 지원
2. 권한 부여: 사용자별로 다른 권한을 부여하거나, URL/메서드 수준에서의 세밀한 권한 제어 가능
3. *CSRF 방지: CSRF 공격 방지를 위한 설정을 기본 제공
*Form-Login 사용자가 웹 페이지의 로그인 폼에 아이디/비밀번호를 입력하여 인증하는 방식 *LDAP 네트워크 프로토콜 중 하나로, 디렉터리 서비스를 조회하고 수정하는데 사용 *OAuth 비밀번호 제공 없이, 자신의 정보를 안전하게 공유할 수 있게 하는 프로토콜 (예시: 카카오 로그인) *CSRF 웹 사이트의 취약점을 이용하여 의지와 무관하게 공격자가 의도한 행동을 하도록 만드는 공격 방식 2. Spring Security의 주요 개념: 인증과 인가
Spring Security는 인증(Authentication)과 인가(Authorization)의 두 가지 주요 프로세스를 통해 동작합니다.
인증이란 사용자가 누구인지 확인하는 과정으로, 사용자의 아이디와 비밀번호 일치 여부를 확인합니다.
인가란 사용자가 자원에 접근하거나 작업을 수행할 수 있는지 확인하는 과정으로,
사용자 역할에 따라 접근할 수 있는 페이지와 기능이 달라집니다.
Spring Security의 구체적인 사용 방법과 예제를 통해 Spring Security를 이해해 보도록 하겠습니다.
3. Spring Security 적용
3-1. 의존성 추가
Spring Security를 사용하기 위한 첫 번째 단계는 프로젝트의 의존성에 Spring Security를 추가하는 것입니다.
Maven 기반 프로젝트에서는 pom.xml 파일에 다음과 같이 의존성을 추가할 수 있습니다.
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> </dependencies>
3-2. Spring Security 설정
이후 보안 설정을 위해 'SecurityConfig.java'라는 설정 파일을 작성해야 합니다.
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .anyRequest() .authenticated() .and() .formLogin() .and() .httpBasic(); } }
@Configuration
@EnableWebSecuritySpring Security 설정 파일임을 명시 extends WebSecurityConfigurerAdapter 웹 보안 설정을 위한 클래스 상속 configure(HttpSecurity http) HTTP 요청에 대한 보안 설정하는 메서드 위 예제는
모든 요청(anyRequest())이 인증되어야 함(authenticated())을 명시하고,
폼 로그인(formLogin())과 HTTP Basic 인증(httpBasic())을 사용하도록 설정하고 있습니다.3-3. 사용자 인증
사용자 인증을 위해 UserDetailService 인터페이스를 구현(implements)한 클래스를 정의하고,
PasswordEncoder를 함께 사용하는 것이 일반적입니다.
@Service public class CustomUserDetailsService implements UserDetailsService { @Autowired private UserRepository userRepository; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { User user = userRepository.findByUsername(username); if (user == null) { throw new UsernameNotFoundException("User not found"); } return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), new ArrayList<>()); } }
위 클래스는 Spring Security를 사용하여 사용자 인증 및 인가를 수행할 때 필요한 사용자 세부 정보를 제공하는 역할을 합니다.
UserRepositiry userRepositiry 사용자 데이터를 데이터베이스에서 조회 loadUserByUsername(String username) 사용자 이름을 받아 해당 사용자의 세부 정보를 조회 UsernameNotFoundException Spring Security의 사용자 이름 부재 시 발생하는 표준 예외 org.springframework.security.core.userdetails.User Spring Security에서 사용하는 표준 사용자 세부 정보 클래스 💬 마무리
웹 어플리케이션 보안은 무엇보다 중요합니다.
Spring Security는 이러한 보안을 강력히 지원하며, 사용하기에도 상대적으로 쉽습니다.
이번 포스팅을 통해 Spring Security의 개념과 사용 방법을 통해 어떻게 동작하는지 알아보았습니다.
조금 더 Spring Security를 이해할 수 있도록 활용 예시를 추가하여 글을 보충하도록 할 테니... 지켜봐 주세요.
감사합니다 :)
'네이버클라우드 캠프 | BE > Spring' 카테고리의 다른 글
[Spring Boot] JPQL과 Thymeleaf (0) 2023.06.22 [Spring Boot] 스프링 부트란? (어노테이션, 롬복, DAO-DTO, JPA, 쿼리 메서드 중심으로) (0) 2023.06.21 [Spring Framework] 설치와 서버 생성 (환경설정 미포함) (0) 2023.05.26