스프링 시큐리티 설정Spring Securityspring-boot security 예제Spring boot Security 설정스프링 시큐리티 보안 설정

[Spring Boot Security] 보안 설정에 대해서 알아보자

KUKJIN LEE
KUKJIN LEE
2024년 12월 4일
250

Spring Boot Security는 강력한 보안 설정 기능을 제공하여 개발자가 간편하게 웹 애플리케이션의 보안을 강화할 수 있도록 합니다.

 

1. HttpSecurity를 이용한 보안 설정

1.1 HttpSecurity 클래스는 HTTP 요청에 대한 보안을 구성하는 데 사용됩니다. 이를 통해 특정 URL 패턴에 대한 접근 권한을 설정하고, CSRF(Cross-Site Request Forgery), CORS(Cross-Origin Resource Sharing)과 같은 다양한 보안 기능을 손쉽게 적용할 수 있습니다.

 

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
        .antMatchers("/public/**").permitAll()  // 공용 URL 접근 허용
        .antMatchers("/admin/**").hasRole("ADMIN")  // 관리자 URL에 ADMIN 권한 필요
        .anyRequest().authenticated()  // 나머지 요청에 대해 인증 요구
        .and()
        .formLogin()  // 기본 로그인 폼 제공
        .and()
        .logout()  // 로그아웃 설정
        .permitAll();
}

/public/** 경로는 누구나 접근할 수 있게 하고, /admin/** 경로는 ADMIN 권한이 있어야 하며, 그 외 모든 요청은 인증된 사용자만 접근할 수 있도록 구성합니다.

 

2. CSRF 보호 설정

2.1 CSRF 보호란? Cross Site Request Forgery는 공격자가 사용자 대신 악의적인 요청을 서버에 보내는 공격 기법입니다. Spring Security는 기본적으로 CSRF 보호를 활성화하여 공격을 방지합니다.

 

3. CORS 설정

3.1 CORS란? Cross Origin Resource Sharing은 다른 도메인에서 자원의 접근을 허용할지 여부를 결정하는 보안 매커니즘입니다. Spring Security에서는 HttpSecurity를 통해 CORS 설정을 쉽게 구성할 수 있습니다.

 

4. 로그아웃 설정

4.1 Spring Security에서 로그아웃 기능을 제공하며, /logout URL로 로그아웃 요청을 처리합니다. 로그아웃 시 Session을 후효화하고, 기본적으로 루트 페이지로 리다이렉트합니다.

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .logout()
        .logoutUrl("/perform-logout")  // 로그아웃 URL 변경
        .logoutSuccessUrl("/login?logout")  // 로그아웃 성공 시 리다이렉트 URL 설정
        .invalidateHttpSession(true)  // 세션 무효화
        .deleteCookies("JSESSIONID")  // JSESSIONID 쿠키 삭제
        .permitAll();
}

관련 글

[SQL 입문] 필요한 데이터만 콕 집어 가져올 수 있는 WHERE 절

사용자는 테이블에 있는 모든 데이터를 다 보고 싶어 하지는 않습니다. 오히려 특정 항목에 대한 데이터만 가져오고 싶을 때가 훨씬 많습니다. 예를 들어, 어떤 사용자의 이메일이나 ID는 알고 있는데, 그 사람이 언제 우리 앱에 가입했는지 확인하고 싶다고 가정해 봅시다...

2026년 1월 27일10

SQL에서 SELECT란 무엇인가?

데이터베이스를 거대한 서류 보관함이라고 생각하면 됩니다. 보관함 안에는 수많은 데이터가 차곡차곡 쌓입니다. SELECT는 이 보관함에서 "내가 원하는 정보를 찾아줘!"라고 요청하는 명령어입니다. 이 과정을 전문 용어로 '쿼리(Query)'라고 부릅니다. &nbs...

2026년 1월 26일10

[SQL 기초] "언제 하나씩 다 넣어?" 데이터 한 번에 넣기

개발을 하다 보면 데이터베이스(DB)에 샘플 데이터를 대량으로 넣어야 할 때가 있습니다. 메뉴 100개를 추가해야 하는데 INSERT 문을 100번 쓰고 있다면? 너무 비효율적이죠! 오늘은 SQL에서 여러 데이터를 한 번에 넣는 '다중 삽입(Multiple Inse...

2026년 1월 21일13

SQL 데이터 삽입하기

데이터가 없는 데이터베이스는 연료 없는 로켓과 같습니다. 이제 'Missions' 테이블에 새로운 행(row)을 추가하는 방법을 알아보겠습니다. "삽입(Inserting)"은 '데이터 추가'를 의미합니다. 기존 Missions 테이블 ...

2026년 1월 20일12