본문 바로가기

Spring security

스프링 시큐리티 기본 API 및 Filter 이해 - Form Login 인증

인프런 정수원님의 “스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security"를 보고 작성한 글입니다.

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        // 강의 예제
        http
                .authorizeHttpRequests((authz) -> authz
                        .anyRequest().authenticated()
                )
                .formLogin(fromLogin -> fromLogin
                        //.loginPage("/loginPage")
                        .defaultSuccessUrl("/")
                        .failureUrl("/loginPage?error=true")
                        .usernameParameter("userId")
                        .passwordParameter("passwd")
                        .loginProcessingUrl("/login_proc")
                        .successHandler(new AuthenticationSuccessHandler() {
                            @Override
                            public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
                                System.out.println("authentication " + authentication.getName());
                                response.sendRedirect("/");
                            }
                        })
                        .failureHandler(new AuthenticationFailureHandler() {
                            @Override
                            public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {
                                System.out.println("exception " + exception.getMessage());
                                response.sendRedirect("/login");
                            }
                        })
                        .permitAll());

        return http.build();
    }
}

스프링 시큐리티 기본 API 및 Filter 이해 - 사용자 정의 보안 기능 구현 에서는 스프링 시큐리티가 제공하는 기본적인 로그인 폼에 대해서 소개를 했다면 이번에는 사용자가 직접 커스터마이징하는 방법에 대해서 소개한다.

전체적인 form은 다음과 같다

  1. .loginPage를 설정하면 인증을 위해 로그인 페이지로 이동할때 스프링 시큐리티가 기본으로 제공하는 로그인 폼이 아니라 사용자가 정의한 로그인 페이지로 이동한다.
  2. .defaultSuccessUrl은 인증을 위한 로그인을 시도하고 해당 시도가 성공했을때 이동할 주소를 설정한다.
  3. .failureUrl은 인증을 위한 로그인을 시도하고 해당 시도가 실패했을때 이동할 주소를 설정한다.
  4. .usernameParameter는 인증을 위한 로그인 페이지에서 username을 입력받는 파라미터의 이름을 의미한다.
  5. .passwordParameter는 인증을 위한 로그인 페이지에서 password을 입력받는 파라미터의 이름을 의미한다.
  6. .loginProcessingUrl은 인증을 위한 로그인 페이지에서 로그인 버튼의 url을 설정한다.
    1. 만약 스프링 시큐리티가 기본으로 제공하는 페이지를 사용한다면 유저명, 비밀번호를 보내는 파라미터와 로그인 버튼의 파라미터가 주어진 인자로 설정된다.
  7. .successHandler는 successUrl과 하는 역할은 비슷하지만 조금 더 커스터마이징이 가능하다는 장점이다.
  8. .failureHandler failureUrl과 하는 역할은 비슷하지만 조금 더 커스터마이징이 가능하다는 장점이다.

변경된 usernameParameter, passwordParameter

추가

defaultSuccessUrl과 successHandler는 둘중 하나만 사용해도 된다. 만약 둘다 설정되어있다면 더 자세하게 설정이 가능한 successHandler를 사용한다 이는 failureUrl과 failureHandler에도 동일하게 적용된다.