회원가입을 할때 비밀번호를 1234 라고 입력하면 바로 데이터베이스에 1234 라고 들어가는데
그 부분을 암호화를 시켜서 넣을거다. 그게 바로 해쉬화(암호화)를 할것이다.
시큐리티는 기본적으로 1234로 로그인이 절대 안되고,
해시로 암호화를 시켜야 로그인된다.
해시암호로 만들어야한다.
시큐리티 > 로그인 요청
시큐리티가 요청을 가로채서 유저네임,패스워드를 가저간다.
로그인요청할때 파라미터를 가로챈다. 그리고 로그인을 진행시킨다.
로그인을 진행시키고 완료가 되면, 시큐리티전용세션으로 등록을 한다.
유저정보를 우리는 유저정보를 필요할때마다 가져와서 사용할 수 있다.
스프링이 Ioc로 관리하기 때분에
🔖 여기서 중요한게
우리가 만든 유저오브젝트를 넣을 수 없다.
타입이 정해져있음 userType: userDetails
🔑 두가지 방법 있음
방법1: 시큐리티 타입으로 맞춰서
방법2: 해쉬화(암호화)로 변경
1234를암호화해서 넣어준다.
/*
* encodePWD() 를 호출하면 new BCryptPasswordEncoder() 객체를 리턴받을 수 있다.
* */
public BCryptPasswordEncoder encodePWD() {
String encPassword = new BCryptPasswordEncoder().encode("1234");
return new BCryptPasswordEncoder();
}
이걸 테스트용으로 한번 확인했을때
@Test
public void 해쉬암호화() {
String encPassoword = new BCryptPasswordEncoder().encode("1234");
System.out.println("encPassoword 암호화 :" +encPassoword );
}
코드에 encode("1234")로 넣은 부분이 콘솔창에 해쉬화
된걸 볼 수 있다 🙂
//빈등록 : 스프링 컨테이너에서 객체를 관리할 수 있게 하는 것
@Configuration //빈 등록(Ioc관리)
@EnableWebSecurity //시큐리티에 필터가 등록이 된다. 설정은 아래에서 하면된다.
@EnableGlobalMethodSecurity(prePostEnabled=true) //특정 주소로 접근을 하면 권한 및 인증을 미리 체크하겠다.
public class SecurityConfig {
/*
* encodePWD() 를 호출하면 new BCryptPasswordEncoder() 객체를 리턴받을 수 있다.
* */
@Bean
public BCryptPasswordEncoder encodePWD() {
String encPassword = new BCryptPasswordEncoder().encode("1234");
return new BCryptPasswordEncoder(); //스프링이관리 , 필요할때마다 가져다가 사용하면 된다.
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.csrf().disable()//csrf 토큰 비활성화 (테스트시걸어두는게 좋음)
.authorizeRequests()
.antMatchers("/","/auth/**","/js/**","/css/**", "/images/**").permitAll()
.anyRequest()
.authenticated()
.and()
.formLogin()
.loginPage("/auth/loginForm");
return http.build();
}
}
🔎 CSRF 비활성화
시큐리티를 작동시켰을때 csrf토큰이없으면 막아버림.
그래서 일단 비활성해야함. 테스트용일땐 비활성으로 하고,
토큰을 작업하는게 좋음 !
비밀번호가 해쉬화해서 잘 들어간걸 볼 수 있다.!!