우선 필터 체인을 사용해 모든 사용자가 사용할 수 있게 할거냐 를 선택하였습니다.
여기서 post 값으로 register 를 사용해서 회원가입을 할 수 있게 만들어 봤습니다.
●ProjectSecurityConfig
@Bean
SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
// http.authorizeHttpRequests((requests) -> requests.anyRequest().permitAll());
// http.authorizeHttpRequests((requests) -> requests.anyRequest().denyAll());
http
.csrf(csrfConfig -> csrfConfig.disable())
.authorizeHttpRequests((requests) -> requests.requestMatchers("/myAccount","/myBalance","/myCards").authenticated()
.requestMatchers("/notices", "/myloans","/error","/register").permitAll()
);
http.formLogin(withDefaults());
http.httpBasic(withDefaults());
return http.build();
}
// @Bean
// public UserDetailsService userDetailsService(DataSource dataSource){
// return new JdbcUserDetailsManager(dataSource);
// }
@Bean
public PasswordEncoder passwordEncoder(){
// return new BCryptPasswordEncoder();
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
@Bean
public CompromisedPasswordChecker compromisedPasswordChecker(){
return new HaveIBeenPwnedRestApiPasswordChecker();
}
spring Security 에 구조에 대해 연관성이 높아서 해석하기에 어려움이 있었다.
● EasyBankDetailsServise
public class EasyBankUserDetailsService implements UserDetailsService {
private final CustomerRepository customerRepository;
@Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
Customer customer = customerRepository.findByEmail(email).orElseThrow(() ->
new UsernameNotFoundException("등록된 이메일이 없습니다." + email));
List<GrantedAuthority> grantedAuthorities = List.of(new SimpleGrantedAuthority(customer.getRole()));
return new User(customer.getEmail(), customer.getPwd(),grantedAuthorities);
}
}
이메일을 찾아서 없으면 에러문을 까지 보여지게 했다.
repository를 만들어서 데이터베이스 쿼리를 사용합니다 .
Optional<Customer> findByEmail(String email);
간단한 select 문으로 where절에 email를 넣었다.
● UserController
@PostMapping("/register")
public ResponseEntity<String> registerUser(@RequestBody Customer customer){
try {
String hashPwd = passwordEncoder.encode(customer.getPwd());
customer.setPwd(hashPwd);
Customer saveCustomer = customerRepository.save(customer);
if(saveCustomer.getId() > 0){
return ResponseEntity.status(HttpStatus.CREATED)
.body("생성완료");
} else {
return ResponseEntity.status(HttpStatus.BAD_REQUEST)
.body("이메일을 잘못 입력했다");
}
}catch (Exception e){
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body("생성 불가" + e.getMessage());
}
}
PostMapping 을 통해 데이터를 보내주었고 try catch를 통해 변수를 잡았다.
여기선 RequestBody 를통해 Customer entity를 다 넣어주었다. 추후에 이 entity 를 다 넣는건 데이터 손해가 크기 때문에
보강을 할 예정이다.
'spring' 카테고리의 다른 글
tosspayment api 사용해보기 (0) | 2024.04.18 |
---|---|
SPRING HATEOAS/Security == Intercepter (0) | 2024.03.15 |
맥북에서 DBeaver spring 으로 연결 (0) | 2024.03.01 |
spring pom.xml (0) | 2024.02.28 |
spring 등록 출력(복습) (0) | 2024.02.27 |