쌓고 쌓다

Spring Security 설정 및 로그인 페이지로 보내기 본문

프로그래밍/spring

Spring Security 설정 및 로그인 페이지로 보내기

승민아 2024. 1. 15. 14:50

 

먼저 시큐리티 사용을 위해 Gradle에 추가해주자.

 

build.gradle

implementation 'org.springframework.boot:spring-boot-starter-security'

 

 

설정파일을 관리하기 위해 다음과 같이 폴더를 구성한다.

config 폴더에 SecurityConfig를 만들어준다.

 

SecurityConfig

package com.example.spotserver.config;

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.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        //http.csrf(CsrfConfigurer::disable);
        http.csrf(AbstractHttpConfigurer::disable);

        http.authorizeHttpRequests(request ->
                        request
                                .requestMatchers("/user/**").authenticated()
                                .requestMatchers("/managers/**").hasAnyRole("ADMIN", "MANAGER")
                                .requestMatchers("/admin/**").hasAnyRole("ADMIN")
                                .anyRequest().permitAll())
                .formLogin(formLogin -> formLogin
                        .loginPage("/login")
                        .defaultSuccessUrl("/"));

        return http.build();
    }

}

 

  • @EnableWebSecurity : 스프링 시큐리티 필터가 스프링 필터 체인에 등록 됩니다.
  • /user 포함 요청은 로그인 사용자만 사용이 가능하며 managers과 admin은 각 권한이 있어야 접근이 가능하다.
  • anyRquest().permitAll() : 위의 3가지 요청외에는 모두 허용을 한다.
  • loginPage : 로그인이 필요하다면 "/login" 페이지로 보낸다.
  • defaultSuccessUrl : 로그인 성공시 보낼 페이지

 

아래의 요청 결과는 로그인 페이지로 리다이렉트하는 formLogin 메서드를 제외한 결과입니다.

 

로그인하지 않은 상태에서 "/user" 요청을 했더니 403에러 Forbidden이 발생한다.

403 에러는 서버에 요청이 도착했으나 권한 때문에 거절된 상황을 알린다.

 

권한이 필요없는 요청은 정상적으로 응답을 받을 수 있다.

Comments