Lombok , Web , Eureka Discovery Client 의존성 추가
인텔리J 나 이클립스 같은 IDE 은 시스템의 부하를 줄 수 있기 때문에 여러개의 인텔리J 를 띄워서 하는거는 비효율적이다.
// application.yml
greeting:
message: Welcome to the Support Kim.
// Gretting.class
@Component
@Data
public class Greeting {
@Value("${greeting.message}")
private String message;
}
// Controller
// 환경설정 값 가져오는 방법
// 1. Environment 사용
// 2. @Value 사용
// Greeting 에 @Component 를 붙혔기 때문에 스프링 빈에 등록되고 그것을 가져올 수 있다.
@Autowired
private Greeting greeting;
@Autowired
private Environment env;
@GetMapping("/welcome")
public String welcome() {
// 1. return env.getProperty("greeting.message");
// 2. return greeting.getMessage();
}
// application.yml
h2:
console:
enabled: true
settings:
web-allow-others: true
path: /h2-console
// application.yml
h2:
console:
enabled: true
settings:
web-allow-others: true
path: /h2-console
jpa:
hibernate:
ddl-auto: update
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:testdb
username: sa
password:
RequestUser 에는 없지만 Dto , Entity 에는 encryptedPwd 필드를 만들어서 비밀번호를 암호화한 값을 보관하고 , userID 필드도 만들어서 User 끼리 보관한다.
// ModelMapper 사용 예제
ModelMapper modelMapper = new ModelMapper();
// 기본 설정
modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
UserEntity userEntity = modelMapper.map(userDto, UserEntity.class);
// Controller
@PostMapping("/users")
public ResponseEntity<ResponseUser> createUser(@RequestBody RequestUser user) {
ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
UserDto userDto = modelMapper.map(user, UserDto.class);
userService.createUser(userDto);
ResponseUser responseUser = modelMapper.map(userDto , ResponseUser.class);
// 201번 성공코드
return ResponseEntity.status(HttpStatus.CREATED).body(responseUser);
}
@Configuration
@EnableWebSecurity
public class WebSecurity{
private UserService userService;
@Bean
protected SecurityFilterChain configure(HttpSecurity http) throws Exception {
http.csrf( (csrf) -> csrf.disable());
http.authorizeHttpRequests( (authz) -> authz
.requestMatchers("/users/**").permitAll());
http.headers((headers) -> headers.frameOptions((frameOptions) -> frameOptions.sameOrigin()));
return http.build();
}
}
// Service
private BCryptPasswordEncoder passwordEncoder;
// 그냥 이렇게만 하면 오류가 발생한다.
// 그 이유는 BCryptPasswordEncoder 는 등록이 되지 않기 떄문에 찾을 수 없어서 오류가 발생한다.
// 즉 가장 먼저 호출되는 스프링 어플리케이션 기동 클래스에다가 넣어주면 된다.
@Autowired
public UserServiceImpl(UserRepository userRepository, BCryptPasswordEncoder passwordEncoder) {
this.userRepository = userRepository;
this.passwordEncoder = passwordEncoder;
}
// 사용 코드
userEntity.setEncryptedPwd(passwordEncoder.encode(userDto.getPwd()));
@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
// 가장 먼저 기동되는 곳에서 빈으로 등록
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
이렇게 BCryptPasswordEncoder 를 활용해서 pwd 를 암호화해서 DB 에 저장할 수 있다.