회원가입과 로그인에 사용될 뷰를 각각 제작해준다
소스는 여기서 확인할 수 있다.
MemberRepository.java
package com.donggeun.springSecurity.repository;
import com.donggeun.springSecurity.model.Member;
import org.springframework.data.repository.CrudRepository;
public interface MemberRepository extends CrudRepository<Member, Long> {
Member findByUsername(String username);
}
SpringBoot는 CurdRepository를 이용해서 기본적인 DB 명령을 수행할 수 있다.
또한 findBy[ColumnName]을 이용해서 쉽게 DB모델을 찾을 수 있다.
public interface AuthService {
void signUpUser(Member member);
Member loginUser(String id, String password);
}
@Service
public class AuthServiceImpl implements AuthService {
@Autowired
private MemberRepository memberRepository;
@Override
public void signUpUser(Member member) {
String password = member.getPassword();
String salt = saltUtil.genSalt();
member.setSalt(new Salt(salt));
member.setPassword(saltUtil.encodePassword(salt,password));
memberRepository.save(member);
}
@Override
public Member loginUser(String id, String password) throws Exception{
Member member = memberRepository.findByUsername(id);
if(member==null) throw new Exception ("멤버가 조회되지 않음");
String salt = member.getSalt().getSalt();
password = saltUtil.encodePassword(salt,password);
if(!member.getPassword().equals(password))
throw new Exception ("비밀번호가 틀립니다.");
return member;
}
의존성 주입을 위한 Service Interface와 ServiceImpl
실제로 비즈니스 로직이 이루어지는 Service단, 데이터를 받으면 유저의 정보를 저장하게끔 설정했다. Salt와 관련된 부분은 여기를 참고하길 바란다.
@RestController
@RequestMapping("/user")
public class MemberController {
@Autowired
private AuthService authService;
@PostMapping("/signup")
public Response signUpUser(@RequestBody Member member){
Response response = new Response();
try{
authService.signUpUser(member);
response.setResponse("success");
response.setMessage("회원가입을 성공적으로 완료했습니다.");
}
catch(Exception e){
response.setResponse("failed");
response.setMessage("회원가입을 하는 도중 오류가 발생했습니다.");
response.setData(e.toString());
}
return response;
}
와 같이 Repository - Service - Controller 순으로 코드를 작성해준다.
각각의 코드는 Spring 기본 Architecture를 기반으로 구성했다.
Unit 테스트나 주어진 리액트와 연결해보거나, 혹은 Postman을 이용해서 DB에 직접 들어가는지 확인을 해보자
위 사진처럼 데이터가 DB에 정상적으로 들어갔다면 성공이다.
회원가입 부분은 여느 Logic과 다름없는 REST한 작업이기 때문에, 간략히 설명하고 넘어가겠다!.
MemberController 부분에 Response 객체는 어떤걸 사용하시는지요 /.?
javax.xml.ws.response와 catialina/connector, coyote 이렇게 3개가 있는데 모두 보이지 않습니다
.setResponse, setMessage 부분이 없다고 나와 구현이 안되는데 어떤 걸 적용 시켜야 되는지요 ㅠ