스프링부트+jsp로 배달사이트 만들기-07 회원가입 03 비밀번호 암호화하기

2021. 12. 6. 12:23스프링부트

비밀번호를 평문으로 저장했을시 서버가 해킹당하면 비밀번호가 그대로 유출될수 있습니다

 

 spring-security의 PasswordEncoder를 사용하면 쉽게 비밀번호를 암호화 할 수 있습니다

 

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-security</artifactId>
</dependency>

 

pom.xml에 추가후 실행해보면 스프링시큐리티 기본 페이지가 보입니다

 

커스텀 로그인페이지를 사용하기 위해 설정파일을 추가합니다

 

 

@EnableWebSecurity
@Configuration
public class SecurityConfig  extends WebSecurityConfigurerAdapter {

	@Bean
	public BCryptPasswordEncoder encodePwd() {
		return new BCryptPasswordEncoder();
	}
    
	@Override
	protected void configure(HttpSecurity http) throws Exception {
		http.csrf().disable();
		
		http.authorizeRequests()
			.antMatchers("/admin/**").hasRole("ADMIN")
			.antMatchers("/user/**").hasAnyRole("ADMIN, USER")
			.anyRequest().permitAll()
		.and()
			.formLogin()
			.loginPage("/") // 인증 필요한 페이지 접근시 이동페이지
			.loginProcessingUrl("/login")
		.and()
			.logout()
			.logoutSuccessUrl("/myPage")
		;
		
	}
}
  • @Configuration 설정파일로 등록
  • @EnableWebSecurity 아래 구현하는 시큐리티 필터를 사용
  • .antMatchers("/admin/**").hasRole("ADMIN")  /admin으로 시작하는 url은 권한이 ADMIN인 사람만 가능
  • .antMatchers("/user/**").hasAnyRole("ADMIN, USER") /user로 시작하는 url은 권한이 ADMIN 또는 USER인 사람만 가능
  • .anyRequest().permitAll() 이 외의 요청은 누구나 가능
  • .loginPage("/") 권한이 없는데 권한이 필요한 페이지로 이동시 "/"페이지로 이동
  • .loginProcessingUrl("/login") 실제 로그인을 처리할 주소
  • .logoutSuccessUrl("/myPage") 로그아웃 성공시 이동할 페이지

 

위에서 빈으로 등록한 BCryptPasswordEncoder를 이용해 비밀번호를 암호화 할수있습니다

 

UserController에서 bean을 주입받기위해 코드를 추가 joinProc() 회원가입 처리부분을 수정합니다

@Autowired
private BCryptPasswordEncoder pwdEncoder;

 

String encPwd = pwdEncoder.encode(join.getPassword());
join.setPassword(encPwd);
userService.join(join);

 

기존에 있던 아이디를 삭제하고 다시 회원가입을 하면 암호화된 비밀번호를 볼수있습니다