Spring - SpringSecurity

개미는뚠뚠·2024년 10월 6일
0

Spring

목록 보기
6/6
post-thumbnail

🍞Spring Security란?

Spring Security는 Java 기반 애플리케이션의 보안을 강화하기 위한 강력한 프레임워크로 인증(Authentication)권한 부여(Authorization)를 포함하여 다양한 보안 기능을 제공한다.

  • 인증(Authentication): 사용자의 신원을 확인하는 과정이다. 예를 들어, 사용자 이름과 비밀번호를 확인하여 사용자가 누구인지 파악한다.
  • 권한 부여(Authorization): 인증된 사용자가 특정 자원에 접근할 수 있는 권한이 있는지를 결정하는 과정이다.

🍞Spring Security 설정하기

1.의존성 추가 (maven - pom.xml설정)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

2.기본 보안 설정(WebSecurityConfigurerAdapter를 확장하여 설정)

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/", "/home").permitAll() // 특정 경로는 인증 없이 접근 가능
                .anyRequest().authenticated() // 나머지 요청은 인증 필요
                .and()
            .formLogin()
                .loginPage("/login") // 로그인 페이지 설정
                .permitAll() // 로그인 페이지는 인증 없이 접근 가능
                .and()
            .logout()
                .permitAll(); // 로그아웃은 인증 없이 가능
    }
}

3.사용자 인증 정보 설정(Spring Security는 메모리 내에서 사용자 정보를 저장)

import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
            .withUser("user")
            .password(passwordEncoder().encode("password"))
            .roles("USER")
            .and()
            .withUser("admin")
            .password(passwordEncoder().encode("admin"))
            .roles("ADMIN");
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

🍞애플리케이션 보호

spring Security로 기본 보안은 갖췄으나 추가 보안이 필요하다 판단할 시 아래와 같이 추가 설정을 진행 갖췄으나 추가 보안이 필요하다 판단할 시 아래와 같이 추가 설정을 진행

HTTPS 사용: 애플리케이션을 HTTPS로 배포하여 데이터 전송 시 보안을 강화.

CSRF 보호: 기본적으로 Spring Security는 CSRF(Cross-Site Request Forgery) 공격을 방지합니다. 이를 위해 CSRF 토큰을 사용.

세션 관리: 세션 고정 공격을 방지하기 위해 세션 관리 설정을 조정 가능.

0개의 댓글