스프링 시큐리티는 비밀번호가 해쉬화 되어야 로그인이 가능.
SecurityConfig 수정
package com.pure.blog.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
//이 세가지는 세트 상품이라고 생각하면 편함.
@Configuration // 빈 등록
@EnableWebSecurity // 시큐리티 필터 추가 == 시큐리티 설정을 이 클래스에서 하겠다.
@EnableGlobalMethodSecurity(prePostEnabled = true) //특정 주소로 접근하면 권한 및 인증을 미리 체크함.
public class SecurityConfig extends WebSecurityConfigurerAdapter{
@Bean
public BCryptPasswordEncoder encodePWD() {
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable() //csrf 토큰 비활성화 (테스트시 설정해 두는 것이 좋음)
.authorizeRequests()
.antMatchers("/", "/auth/**", "/js/**", "/css/**", "/image/**")
.permitAll()
.anyRequest()
.authenticated()
.and()
.formLogin()
.loginPage("/auth/loginForm");
}
}
UserService.java 수정
package com.pure.blog.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.pure.blog.model.RoleType;
import com.pure.blog.model.User;
import com.pure.blog.repository.UserRepository;
//component-scan으로 Bean에 등록. (IoC)
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Autowired
private BCryptPasswordEncoder encoder;
@Transactional //내부 기능이 모두 정상작동 하면 commit, 하나라도 실패하면 rollback
public int 회원가입(User user) {
try {
String rawPassword = user.getPassword();
String encPassword = encoder.encode(rawPassword);
user.setPassword(encPassword);
user.setRole(RoleType.USER);
userRepository.save(user);
return 1;
} catch (Exception e) {
e.printStackTrace();
System.out.println("UserService: 회원가입() : " + e.getMessage());
}
return -1;
}
}
'취업 준비 > Spring boot' 카테고리의 다른 글
29. 스프링 시큐리티를 사용한 로그인 (0) | 2022.01.26 |
---|---|
28. XSS와 CSRF (0) | 2022.01.26 |
26. 스프링 시큐리티 로그인 페이지 커스터마이징 (0) | 2022.01.26 |
25. 스프링 시큐리티 사용해보기 (0) | 2022.01.26 |
24. 스프링 시큐리티 시작 전 컨텍스트 패스 모두 수정 (0) | 2022.01.26 |