본문 바로가기

👩‍💻 BackEnd/🍃 스프링부트 [SpringBoot]

16강 Spring Security Config 설정 - 로그인 페이지로 이동하도록 설정

스프링 시큐리티 

어떤 요청이 들어왔을 경우 pom.xml 설정에 spring security관련 라이브러리가 추가되어있을 경우 

인증되지 않은 사용자가 접근하려고 하는 경우 기본적으로 로그인 화면으로 Redirection을 해 줌. 

 

Redirection이라는 것은 이전 글에서 설명했던 것과 같이 어떤 요청이 들어왔을 경우 다른 요청으로 바꿔서 보내는 것을 의미함. 

 

localhost:8080을 주소줄에 입력 후 enter를 치면 주소 줄이 localhost:8080/login 으로 자동으로 Redirection이 됨. 

 

따라서 내가 설정한 로그인 페이지로 이동할 수 있도록 설정하기 위해서는  SecurityConfig 파일을 생성 후 작성할 필요가 있음. 

 

@EnableWebSecurity // 해당 파일로 security 활성화
@Configuration // IoC -> 빈으로 등록 메모리에 뜨게함 -> 기존 시큐리티가 가로채고 있음
public class SecurityConfig extends WebSecurityConfigurerAdapter {  

}

 

1. WebSecurityConfigurerAdapter 를 상속 받아야 함. 

2. @Configuration : IoC  ▷ 빈으로 등록하여 메모리에 띄움.

3. @EnableWebSecurity  ▷ 해당 파일로 security 활성화.

 

 

그리고난 후, 설정이 필요함. 

 


 

1. 메서드 오버라이드 하기 

overide 목록 (메서드 재정의 목록)에서 configure 메서드 overide 하기

 

 

 @Override
 protected void configure(HttpSecurity http) throws Exception {
   super.configure(http);  // 기본 설정  -> 이 코드가 있어서 시큐리티가 가로채서 기본 로그인 창이 뜨는 것임.
   
}

HttpSecurity http를 매개변수로 갖는 메서드 선택 후 재정의 

 

1) super.configure(http); 주석 처리 전 

주석 처리 전

 

super.configure(http); 를 지우면 기존 시큐리티가 갖고 있는 기능이 모두 비활성화됨. 

 

2) super.configure(http); 주석 처리 후 

주석 처리 후


 

2. overide 한 메서드 수정하기 

@Override
protected void configure(HttpSecurity http) throws Exception {
	http.csrf().disable(); // 토큰을 갖고 있는지 아닌지 구분하지 않겠다.
    	http.authorizeRequests()
    		.antMatchers("/", "/user/**", "/image/**", "/subscribe/**", "/comment/**").authenticated()
        	// 인증된 사용자의 경우 다음과 같은 요청 url을 가질 경우 인증이 필요하고(authenticated), 
      	  	.anyRequest().permitAll();
     	  	// 그 외의 모든 요청은 허용하겠다. 
}

이렇게 코드를 작성한 뒤 실행시켜보면, 

 

403 에러코드가 반환됨. 

 

403번 에러코드 : Forbidden /  서버가 허용하지 않는 웹 페이지나 미디어를 사용자가 요청할 때 웹 서버가 반환하는 HTTP 상태 코드 

출처 : 위키백과  

 

 

따라서 antMatchers에 명시되어있지 않은 url의 경우에는

사용자가 로그인 페이지로 이동을 시켜 로그인을 하도록 유도하거나 회원가입을 할 수 있도록 설정을 하는 것이 좋다! 

 

@Override
protected void configure(HttpSecurity http) throws Exception {
    	http.csrf().disable(); // 토큰을 갖고 있는지 아닌지 구분하지 않겠다.
        http.authorizeRequests()
                .antMatchers("/", "/user/**", "/image/**", "/subscribe/**", "/comment/**").authenticated()
                .anyRequest().permitAll()
                .and()
                .formLogin()
                .loginPage("/auth/signin") // GET  로그인 페이지의 요청주소 명시하기! 
                .loginProcessingUrl("/auth/signin")// post -> 스프링 시큐리티가 로그인 프로세스 진행
                .defaultSuccessUrl("/");
    }

 

  • defaultSuccessUrl("/") : login 이 성공적으로 이루어졌을 경우 보내는 주소 
이런식으로 스프링 시큐리티 초기 설정을 할 수 있다는 것을 배웠다!