1) LoginApi
package clonestudy.clonestudy.login.api;
import clonestudy.clonestudy.exception.ShjException;
import clonestudy.clonestudy.login.model.LoginLog;
import clonestudy.clonestudy.login.service.JwtService;
import clonestudy.clonestudy.login.service.LoginService;
import clonestudy.clonestudy.login.vo.LoginLogVO;
import clonestudy.clonestudy.login.vo.LoginVO;
import clonestudy.clonestudy.share.ResponseEnum;
import clonestudy.clonestudy.share.ResponseMessage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.security.NoSuchAlgorithmException;
import java.util.List;
@Api(tags = "로그인")
@RestController
@RequestMapping(value = "/v1")
@Slf4j
public class LoginApi {
@Autowired
private LoginService loginService;
@Autowired
private JwtService jwtService;
@ApiOperation(value = "로그인", notes = "로그인")
@PostMapping("/signin")
public ResponseMessage memberLogin(@RequestBody LoginVO loginVO, HttpServletRequest request) throws NoSuchAlgorithmException, ShjException {
ResponseMessage responseMessage = loginService.memberLogin(loginVO);
ResponseEnum responseEnum = loginService.memberLog(loginVO);
loginService.saveLoginLog(loginVO.getEmail(), responseEnum, getUserIp(request));
loginService.updateMemberLoginData(loginVO.getEmail(), responseEnum);
return responseMessage;
}
@ApiOperation(value = "로그인 로그 조회", notes = "로그인 로그 조회")
@ApiImplicitParam(name = "first", value = "로그 조회 범위 시작 지점 ex) 2022-10-07 18:30:00")
@GetMapping("/login-log/{first}/{end}/{email}")
public ResponseMessage findLoginLogList(@PathVariable String first, @PathVariable String end, @PathVariable String email, HttpServletRequest request) throws ShjException {
String token = request.getHeader("x-access-token");
jwtService.verify(token);
LoginLogVO loginLogVO = new LoginLogVO(first, end, email);
List<LoginLog> loginLogList = loginService.findLoginLogList(loginLogVO);
return new ResponseMessage(ResponseEnum.SUCCESS, loginLogList);
}
//IPv4로?
private String getUserIp(HttpServletRequest request) {
String ip = request.getHeader("X-FORWARDED-FOR");
if (ip == null || ip.length() == 0) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0) {
ip = request.getHeader("WL-Proxy-Client-IP"); //웹로직
}
if (ip == null || ip.length() == 0) {
ip = request.getRemoteAddr();
}
return ip;
}
}
2) MemberApi
package clonestudy.clonestudy.member.api;
import clonestudy.clonestudy.exception.ShjException;
import clonestudy.clonestudy.login.service.JwtService;
import clonestudy.clonestudy.member.dto.MemberInfoDTO;
import clonestudy.clonestudy.member.service.MemberService;
import clonestudy.clonestudy.member.vo.MemberRegVO;
import clonestudy.clonestudy.share.ResponseEnum;
import clonestudy.clonestudy.share.ResponseMessage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
@Api(tags = "사용자")
@RestController
@RequestMapping(value = "/v1")
@Slf4j
public class MemberApi {
@Autowired
MemberService memberService;
@Autowired
JwtService jwtService;
@ApiOperation(value = "회원가입", notes = "회원가입")
@PostMapping("/signup") @Validated
public ResponseMessage saveMember(@RequestBody MemberRegVO memberRegVO) throws ShjException {
memberService.checkDuplicateMemberInfo(memberRegVO);
memberService.saveMember(memberRegVO);
return new ResponseMessage<ResponseEnum>(ResponseEnum.SUCCESS);
}
@ApiOperation(value = "회원조회", notes = "회원조회")
@GetMapping("/search/{email}")
public ResponseMessage findMember(@PathVariable String email, HttpServletRequest request) throws ShjException {
String token = request.getHeader("x-access-token");
jwtService.verify(token);
MemberInfoDTO memberInfoDTO = memberService.findMember(email);
return new ResponseMessage<>(ResponseEnum.SUCCESS, memberInfoDTO);
}
}
'개발이 좋아서 > Spring이 좋아서' 카테고리의 다른 글
DI (Dependency Injection) / IoC (Inversion of Control) 예제로 알아보자 (0) | 2024.12.27 |
---|---|
좋은 객체 지향 설계의 5가지 원칙 (SOLID) (1) | 2024.12.20 |
[Backend] - 로그인 및 회원가입(회원가입_dto, model, vo) (0) | 2022.10.25 |
[Backend] - 로그인 및 회원가입(회원가입_service, repository) (0) | 2022.10.25 |
[Backend] - 로그인 및 회원가입(로그인_dto, model, vo) (0) | 2022.10.25 |