<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
@Configuration //다른 bean들 보다 우선순위를 앞으로
@EnableWebSecurity //security 어노테이션
public class WebSecurity extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests().antMatchers("/users/**").permitAll();
http.headers().frameOptions().disable(); //h2 console error 해결을 위해
}
}
Security를 위한 class 파일 하나를 생성하여 설정 내용을 적고
@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
//password encode를 사용을 위해 bean으로 등록
@Bean
public BCryptPasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
}
서버를 실행시키는 Application 파일에 bean으로 등록할 passwordEncoder를 설정해준다. 이 설정은 꼭 여기서가 아니라 하나의 java 파일로 만들어서 등록해도 된다.
@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService{
private final UserRepository userRepository;
private final BCryptPasswordEncoder pwdEncoder;
@Override
public ResponseUser createUser(UserDto userDto) {
userDto.setUserId(UUID.randomUUID().toString());
ModelMapper mapper = new ModelMapper();
mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
UserEntity userEntity = mapper.map(userDto, UserEntity.class);
userEntity.setEncryptedPwd(pwdEncoder.encode(userDto.getPwd()));
UserEntity save = userRepository.save(userEntity);
ResponseUser responseUser = mapper.map(save, ResponseUser.class);
return responseUser;
}
}
@Data
@Entity
@Table(name = "users")
public class UserEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, length = 50, unique = true)
private String email;
@Column(nullable = false, length = 50)
private String name;
@Column(nullable = false, unique = true)
private String userId;
@Column(nullable = false, length = 100)
private String encryptedPwd;
}
비밀번호를 암호화 했을 경우 50자리가 넘어서 sql error가 발생하기 때문에 100자로 늘려줬다.
비밀번호가 암호화되어 저장된것을 확인할 수 있다.