[Spring Security] Form Login 개념 및 설정

Wonjun Seo·2023년 3월 30일

Form Login 이란?

FormLogin은 Spring Security에서 제공하는 인증방식이다.

Form Login의 동작 방식은 다음과 같습니다.

  1. 사용자가 특정 URL에 접근하고자 할 때 해당 URL에 대한 인증이 필요한 경우에 Server는 로그인 페이지를 반환합니다.
  2. 사용자가 로그인 폼에 username과 password를 입력하여 로그인 요청(Post Mapping)을 하면 해당 데이터가 서버로 전송됩니다.
  3. 서버는 로그인 정보를 확인하고, 해당 유저가 존재하면 세션과 인증 토큰을 생성하고 저장합니다.

이러한 과정을 거친후 사용자가 원래 접속하려던 URL에 다시 접속하면, 세션에 저장된 인증 토큰이 유지되는 동안에는 해당 사용자를 인증된 사용자라고 판단하여 인증을 유지하게 됩니다.


의존성 설정 방법

dependencies {
	compile "org.springframework.boot:spring-boot-starter-security"
}

Form Login 설정

패키지 > config > SecurityConfig.java

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/user/**").permitAll()
                .antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
                .anyRequest().permitAll()
            .and()
                .formLogin()
                .loginPage("/user/login")
                .usernameParameter("email")
                .passwordParameter("password")
                .defaultSuccessUrl("/")
                .failureUrl("/user/login/fail")
            .and()
                .logout()
                .logoutRequestMatcher(new AntPathRequestMatcher("/user/logout"))
                .logoutSuccessUrl("/");
    }

}

리소스 인증 및 권한설정

CodeDescription
.authorizeRequests()Security처리에 HttpServletRequest를 이용한다. ExpressionUrlAuthorizationConfigurer을 불러온다.
.antMatchers("resource")특정 리소스에 대해서 권한을 설정한다.
.anyRequest()모든 리소스를 의미하며 설정한 경로 외의 모든 경로를 말한다.
.authenticated()인증된 사용자만 접근할 수 있다.
.anonymous()익명 사용자가 접근할 수 있다.
.permitAll()인증 없이 접근할 수 있다.
.hasRole(String role)사용자가 해당되는 Role을 가지고 있으면 사용 할 수 있다.
.hasAnyRole(String role)사용자가 가진 Role 중에 해당되는 Role이 하나라도 있으면 접근할 수 있다.

로그인 폼 사용 설정

CodeDescription
.formLogin()로그인 페이지와 기타 로그인 처리 및 성공 실패를 사용하겠다는 의미이다.
.loginPage(String url)로그인 페이지 경로를 호출한다.
.usernameParameter(String username)Spring Security에서 사용자를 구분할 수 있는 값을 가져온다. default값은 "username"이고 username 외에도 email등을 parameter로 지정할 수 있다.
.passwordParameter(String password)Spring Security에서 사용자를 인증할 수 있는 값을 가져온다. default값은 "password"이다.
.loginProcessingUrl(String url)로그인 즉 인증처리를 하는 url을 설정한다.
.defaultSuccessUrl(String url)정상적으로 인증 성공했을때 이동할 url을 설정한다.
.failureUrl(String url)인증에 실패했을 경우 이동할 url을 설정한다.
.logout()로그아웃 시 설정을 추가할 수 있다.
.logoutUrl(String url)로그아웃을 처리할 url을 설정한다.
.logoutSuccessUrl(String url)로그아웃 성공 시 지정된 url로 이동한다.

Reference

https://velog.io/@seongwon97/Spring-Security-Form-Login
https://lotuus.tistory.com/78

0개의 댓글