Spring Security 예제
우선 코드는 깃허브에 있다.
일단 문서로 정리한 것을 토대로 로그인과 회원가입 어떤 순서로 동작하는지 알아보려고 했다.
로그인
일단 시큐리티에 대한 설정은 SecurityConfig
라는 클래스 설정파일을 만들어서 진행했다.
WebSecurityConfigurerAdapter
WebSecurityConfigurerAdapter
는 WebSecurityConfigurer
라는 인터페이스를
조금 더 쉽게 생성하기 위해 존재하는 클래스이다. 이 클래스의 구현을
그러니까 기본으로 적용되어 있는것 외에 재정의 하여 사용할 수 있다.
아래는 해당 추상클래스에 대한 설명을 가져와봤다.
우리는 이 추상 클래스에서 구현되어있는 configure(HttpSecurity http)
메소드를 재정의 하여 설정을 진행한다.
SecurityConfig
package io.github.lsj8367.security.configuration;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/", "/h2-console/**"); // "/" 와 "/h2-console"은 접근 가능
//여기서 무시하는 과정이 아래의 configure()보다 우선순위가 높다.
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated() //모든 요청은 인증이 필요함 위의 ignoring()에 포함된 애들은 제외시킨다. 추가적으로 permitAll()로 해제해준 url은 접근 가능
.and()
.formLogin() //formLogin 설정 default /login
.and()
.logout().permitAll(); //logout에 대한 모든권한 적용 default /logout
}
}
여기 설정에서 formLogin()
은 uri를 잡아주지 않았기에 기본값인 /login
으로 로그인을 처리한다.
UsernamePasswordAuthenticationFilter
이때 동작하는 필터가 UsernamePasswordAuthenticationFilter
인데 이 클래스는
AbstractAuthenticationProcessingFilter
를 상속받아 처리해준다.
UsernamePasswordAuthenticationFilter
클래스는 기본값인 /login
에 대해 응답한다고
설명에 명시되어 있다. 여기서 사용되는 username
, password
는 configure()
에서
usernameParameter()
와 passwordParameter()
로 변경해서 매칭해줄 수 있다.
인증에 대한 검증을 수행하게 되는데
HTTP 메소드가 POST
인지를 먼저 판단한다.
그 후에 obtainUsername
, obtainPassword
로 파라미터 설정한것을 가져온다.
나는 기본값으로 두었기에 form안에 input id가 username
, password
이다.
그다음에 null인지, 빈문자열인지 검증을 한 뒤에
UsernamePasswordAuthenticationToken
을 발급해준다.
이렇게 로그인 인증이 일단락 되었다.
'Spring > Security' 카테고리의 다른 글
Authentication 인증 (0) | 2022.08.09 |
---|---|
개요 (0) | 2022.08.09 |