inblog logo
|
moohyun
    프로젝트

    [팀 프로젝트 (제시요)] Spring Security 설정

    프로젝트에 적용한 Security 설정 내용
    화낼거양's avatar
    화낼거양
    Dec 18, 2024
    [팀 프로젝트 (제시요)] Spring Security 설정
    Contents
    설정 파일 내용 :주요 설정 설명
     
     

    설정 파일 내용 :

     
    package com.metacoding.web_project._core.config; import com.metacoding.web_project.user.User; import jakarta.servlet.http.HttpSession; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; @Configuration public class SecurityConfig { @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Bean public SecurityFilterChain configure(HttpSecurity http) throws Exception { http.csrf(AbstractHttpConfigurer::disable); http.headers(headers -> headers .frameOptions(frameOptions -> frameOptions.sameOrigin()) ); http.authorizeHttpRequests(r -> { r.requestMatchers("/admin/**").hasRole("ADMIN") .requestMatchers("/s/**").hasAnyRole("USER", "ADMIN") .anyRequest().permitAll(); }).formLogin(f -> f.loginPage("/login-form") .loginProcessingUrl("/login") .successHandler((request, response, authentication) -> { User user = (User) authentication.getPrincipal(); HttpSession session = request.getSession(); session.setAttribute("sessionUser", user); response.sendRedirect("/"); }) .failureHandler((request, response, exception) -> { response.sendRedirect("/login-form?error=true"); })) .logout(logout -> logout .logoutUrl("/logout") .logoutSuccessUrl("/") .invalidateHttpSession(true) .deleteCookies("JSESSIONID") ); return http.build(); } }
     
     
     

     
     

    주요 설정 설명

     

    클래스 선언 및 어노테이션:

     
    @Configuration public class SecurityConfig {
     
    • @Configuration: 이 클래스가 Spring의 설정 클래스임을 나타냅니다.
     

    비밀번호 암호화 설정:

     
    @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); }
     
    • PasswordEncoder Bean: 비밀번호를 암호화하기 위해 BCryptPasswordEncoder를 Bean으로 등록합니다.
     

    보안 필터 체인 설정:

     
    @Bean public SecurityFilterChain configure(HttpSecurity http) throws Exception {
     
    • SecurityFilterChain Bean: HTTP 보안 구성을 정의하는 메서드입니다.
     

    CSRF 보호 비활성화:

     
    http.csrf(AbstractHttpConfigurer::disable);
     
    • CSRF 보호 비활성화: CSRF(Cross-Site Request Forgery) 보호를 비활성화합니다.
     

    헤더 설정:

     
    http.headers(headers -> headers .frameOptions(frameOptions -> frameOptions.sameOrigin()) );
     
    • Frame Options 설정: 동일 출처에서만 프레임을 허용하도록 설정합니다. 이를 통해 Clickjacking 공격을 방지합니다.
     

    요청 권한 설정:

     
    http.authorizeHttpRequests(r -> { r.requestMatchers("/admin/**").hasRole("ADMIN") .requestMatchers("/s/**").hasAnyRole("USER", "ADMIN") .anyRequest().permitAll(); });
     
    • 요청 권한 설정: 특정 URL 패턴에 대한 권한을 설정합니다.
      • /admin/**: ADMIN 역할이 있는 사용자만 접근 가능.
      • /s/**: USER 또는 ADMIN 역할이 있는 사용자만 접근 가능.
      • 기타 모든 요청은 접근 허용.
     

    로그인 설정:

     
    .formLogin(f -> f.loginPage("/login-form") .loginProcessingUrl("/login") .successHandler((request, response, authentication) -> { User user = (User) authentication.getPrincipal(); HttpSession session = request.getSession(); session.setAttribute("sessionUser", user); response.sendRedirect("/"); }) .failureHandler((request, response, exception) -> { response.sendRedirect("/login-form?error=true"); }))
     
    • 로그인 설정:
      • loginPage("/login-form"): 사용자 정의 로그인 페이지 경로.
      • loginProcessingUrl("/login"): 로그인 처리 URL.
      • successHandler: 로그인 성공 시 처리 로직.
        • 사용자 정보를 세션에 저장하고 홈 페이지로 리디렉션.
      • failureHandler: 로그인 실패 시 처리 로직.
        • 로그인 페이지로 리디렉션하며 오류 메시지 전달.
     

    로그아웃 설정:

     
    .logout(logout -> logout .logoutUrl("/logout") .logoutSuccessUrl("/") .invalidateHttpSession(true) .deleteCookies("JSESSIONID") );
     
    • 로그아웃 설정:
      • logoutUrl("/logout"): 로그아웃 처리 URL.
      • logoutSuccessUrl("/"): 로그아웃 성공 시 리디렉션할 URL.
      • invalidateHttpSession(true): 세션 무효화.
      • deleteCookies("JSESSIONID"): JSESSIONID 쿠키 삭제.
     

    보안 필터 체인 빌드:

     
    return http.build();
     
    • 보안 필터 체인 빌드: 위에서 설정한 보안 구성을 적용하여 보안 필터 체인을 빌드합니다.
    Share article
    Contents
    설정 파일 내용 :주요 설정 설명

    moohyun

    RSS·Powered by Inblog