가장 먼저 필요한설정은 PasswordEncorer 라는 객체이다. 간단히 말하면 비밀번호를 암호화 시켜주는것이다.
PasswordEncorer는 인터페이스라 구현을 하던 구현한 클래스를 이용해야 한다. 고맙게도 스프링 시큐리티에서는 BCryptPasswordEncoder 라는 클래스를 주로 사용한다.
BCryptPasswordEncoder = bcrypt라는 해시 함수를 이용해서 패스워드를 암호화 목적으로 설계된 클래스이다.
암호화된 패스워드는 다시 복호화가 불가능 하고 매번 암호화된 코드값은 달라진다
암호화된 코드값을 원본과 비교해 암호화된 결과인지만을 확인 할수있지만 원본 내용은 볼수 없다.
- 비밀번호 7942를 encode()로 암호화 해준뒤 원본비밀번호와 비교를 해주는 코드이다.
암호화된 패스워드를 이용하기 위해서는 사용자가 필요하다.
AuthenticationManger의 설정을 쉽게 도와주는 configure()를 사용할 예정이다.
configure() = 파라미터가 다른 여러 개의 메서드가 있다. @Override 해서 사용한다.
AuthenticationMangerBuilder라는 타입을 매개변수로 사용하는 cofigure() 을 만들어준다.(말그대로 인증매니저 를 설정할떄 사용한다)
inMemoryAuthentication() 을 이용해서 한 명의 사용자를 만들어준다.
password 에는 이전에 설정해뒀던 암호화된 비밀번호를 설정해준다.
roles = 권한설정
쉽게 말하면 특정 url 주소에 접속할때 접근제한을 설정 하는 방법이다.
접근 제한은 크게 설정을 통해서 1)패턴을 지정하거나 2)어노테이션을 이용해서 적용 하는 방법이 있다.(여기서는 1번 을 사용한다)
configure() 라는 매서드를 httpSecurity 타입을 파라미터로 받는 매서드로 오버라이드 해 접근제한을 처리할수 있다.
코드를 보면 대략적으로 이해 할수있다. USER라는 권한(ROLE)를 가진 사용자만 그 자원(URL)에 접속 가능 할수있게 만들었다.
authorizeRequests() 인증이 필요한 자원(페이지) 선택
antMatchers() 앤스스타일의 패턴으로 원하는 자원 선택(페이지)
permitAll() 말그대로 누구에게나 허용(로그인 필요 x)
httpSecurity 객체는 연속적으로 ',' 을 사용해서 추가적인 자원에 대한 설정을 할수있다.
formLogin() 은 권한이 없거나 문제가 발생해서 접근이 제한되면 로그인 페이지를 보여주도록 지정할 수 있고 화면으로 로그인 방식을 지원한다.
ROLE_USER
- 여기서 USER 라는 단어는 ROLE_USER라는 상수와 같은 의미이다.
- 스프링 시큐리티의 내부에서 USER라는 단어를 상수처럼 인증된 사용자를 의미한다.