[참고] 아래 첨부한 글을 참고하여 작성된 코드입니다!
https://inkyu-yoon.github.io/docs/Language/SpringBoot/SpringSecurityJoin
원래 (1)에서 참고한 책이 있는데 security를 작성하는 부분에서 이해가 안되는 부분이 있어서 구글링하다가 다른 블로그를 참고하여 코드를 구현하게 되었다ㅠㅠ
1. 의존성 추가
implementation 'org.springframework.security:spring-security-test'
implementation group: 'io.jsonwebtoken', name: 'jjwt', version: '0.9.1'
2. security 코드 추가
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
return httpSecurity
.httpBasic().disable()
.csrf().disable()
.cors().and()
.authorizeRequests()
.antMatchers("user/register", "user/login").permitAll()
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.build();
}
security에 securityFilterChain이 추가되었다.
csrf() : 정상적인 사용자가 의도치 않은 위조 요청을 보내는 것을 의미
→ disable() : rest api를 이용한 서버라면, 서버에 인증 정보를 저장하지 않기 때문에 굳이 불 필요한 csrf 코드 작성할 필요 없음
참고 >> https://velog.io/@woohobi/Spring-security-csrf%EB%9E%80
authorizeRequests() : 시큐리티 처리에 HttpServletRequest를 이용한다는 것을 의미
antMatchers() : 특정한 경로 지정
permitAll() : 모든 사용자가 접근 가능
참고 >> https://velog.io/@jayjay28/2019-09-04-1109-%EC%9E%91%EC%84%B1%EB%90%A8
3. controller 생성
package com.example.everytime.controller;
import com.example.everytime.DTO.UserDto;
import com.example.everytime.entity.User;
import com.example.everytime.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
@RequestMapping("/user")
@Controller
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
private final PasswordEncoder passwordEncoder;
@ResponseStatus(HttpStatus.CREATED)
@PostMapping("/register")
public void userRegister(@RequestBody UserDto userDto) {
User user = User.createUser(userDto, passwordEncoder);
User savedUser = userService.saveUser(user);
}
}
/user/register로 post 요청을 하면 회원가입 끝!
① @RequestBody에서 dto로 회원 정보를 받아온다
② dto를 User.createUser의 매개변수로 삽입하여 엔티티로 변경, 이때 비밀번호는 암호화한다
③ Serivce에 구현된 saveUser를 호출하여 매개변수로 엔티티를 삽입하고, 최종적으로 회원 정보를 db에 저장
* 이때 mysql에 삽입하는 과정에서 오류가 발생했는데 (정확한 오류가 뭐였는지 기억이 안 남...) 그건 그냥 데이터에 비해 컬럼 사이즈가 작아서 생긴 오류로, 크기를 늘려주면 된다
4. 결과
성공!
'프로젝트 내용 정리 > 개인 프로젝트' 카테고리의 다른 글
[Spring boot] (에브리타임 클론코딩) + MySQL, 회원 가입 구현(1) (0) | 2023.07.13 |
---|