Spring security
스프링 시큐리티 기본 API 및 Filter 이해 - Form Login 인증
sami355
2023. 6. 23. 18:30
인프런 정수원님의 “스프링 시큐리티 - 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은 다음과 같다
- .loginPage를 설정하면 인증을 위해 로그인 페이지로 이동할때 스프링 시큐리티가 기본으로 제공하는 로그인 폼이 아니라 사용자가 정의한 로그인 페이지로 이동한다.
- .defaultSuccessUrl은 인증을 위한 로그인을 시도하고 해당 시도가 성공했을때 이동할 주소를 설정한다.
- .failureUrl은 인증을 위한 로그인을 시도하고 해당 시도가 실패했을때 이동할 주소를 설정한다.
- .usernameParameter는 인증을 위한 로그인 페이지에서 username을 입력받는 파라미터의 이름을 의미한다.
- .passwordParameter는 인증을 위한 로그인 페이지에서 password을 입력받는 파라미터의 이름을 의미한다.
- .loginProcessingUrl은 인증을 위한 로그인 페이지에서 로그인 버튼의 url을 설정한다.
- 만약 스프링 시큐리티가 기본으로 제공하는 페이지를 사용한다면 유저명, 비밀번호를 보내는 파라미터와 로그인 버튼의 파라미터가 주어진 인자로 설정된다.
- .successHandler는 successUrl과 하는 역할은 비슷하지만 조금 더 커스터마이징이 가능하다는 장점이다.
- .failureHandler failureUrl과 하는 역할은 비슷하지만 조금 더 커스터마이징이 가능하다는 장점이다.
추가
defaultSuccessUrl과 successHandler는 둘중 하나만 사용해도 된다. 만약 둘다 설정되어있다면 더 자세하게 설정이 가능한 successHandler를 사용한다 이는 failureUrl과 failureHandler에도 동일하게 적용된다.