gradle에 spring security 추가
implementation 'org.springframework.boot:spring-boot-starter-security'
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.
authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests
.requestMatchers(new AntPathRequestMatcher("/**")).permitAll());
return http.build();
}
}
전에는 H2-console에 문제가 있었다고 하는데 현재 내가 사용할 경우에 h2 -console의 경로가 /h2-console을 포함하고 있지않아서 위의 허용범위에 포함되어 제대로 작동하고 있다.
회원가입을 할때 필요한게 뭐가 있을까?
정도가 있을거 같다.
회원 엔티티
@Getter
@Setter
@Entity
public class SiteUser {
@Id
@Column(name = "user_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true)
private String username;
private String password;
@Column(unique = true)
private String email;
}
@RequiredArgsConstructor
@Service
public class UserService {
private final UserRepository userRepository;
public SiteUser create(String username,String email,String password){
SiteUser user = new SiteUser();
user.setUsername(username);
user.setEmail(email);
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
user.setPassword(passwordEncoder.encode(password));
userRepository.save(user);
return user;
}
}
BcyptPasswordEncoder 빈 등록 진행
@Getter
@Setter
public class UserCreateForm {
@Size(min = 3, max = 25)
@NotEmpty(message = "사용자 ID는 필수 입니다.")
private String username;
@NotEmpty(message = "비밀번호는 필수 항목입니다.")
private String password1;
@NotEmpty(message = "비밀번호 확인은 필수 항목입니다.")
private String password2;
@NotEmpty(message = "이메일은 필수 항목입니다.")
@Email
private String email;
}
@RequiredArgsConstructor
@Controller
@RequestMapping("/user")
public class UserController {
private final UserService userService;
@GetMapping("/signup")
public String signup(UserCreateForm userCreateForm){
return "signup_form";
}
@PostMapping("/signup")
public String signup(@Valid UserCreateForm userCreateForm,
BindingResult bindingResult){
if(bindingResult.hasErrors()){
return "signup_form";
}
if(!userCreateForm.getPassword1().equals(userCreateForm.getPassword2())){
bindingResult.rejectValue("password2","passwordIncorrect",
"2개의 패스워드가 일치하지 않습니다.");
return "signup_form";
}
userService.create(userCreateForm.getUsername(),userCreateForm.getEmail(),userCreateForm.getPassword1());
return "redirect:/";
}
}
try {
userService.create(userCreateForm.getUsername(), userCreateForm.getEmail(), userCreateForm.getPassword1());
} catch (DataIntegrityViolationException e) {
log.error("중복 회원가입 진행 오류");
bindingResult.reject("signupFailed", "이미 등록된 사용자입니다.");
return "signup_form";
} catch (Exception e) {
e.printStackTrace();
bindingResult.reject("signupFailed", e.getMessage());
return "signup_form";
}
중복 id 또는 이메일로 회원가입시도시 애초에 불가능하게 unique를 걸어놨기 때문에 500 에러가 발생한다.