URL 설계 시 컨벤션 정하기
API 주소를 http 프로토콜에 맞춰서 URL 컨벤션 설계하기 (코드를 작성하는 회사, 학원에 따라 다름)
- 인증이 필요한 경우는 URL에
/s
붙이기
- JSON 데이터를 보내는 경우에는 URL에
/api
붙이기
전세계 공통 컨벤션
- User의 회원가입, 로그인, 로그아웃에는 JSON데이터를 반환하여도
/join
/login
/logout
을 사용한다.
- 메인페이지의 경우에는 URL을 2개를 지정해준다.
- 예시로 게시글의 목록을 보여주는 화면이 메인일 경우
@GetMapping({"/", "/api/board"})
처럼 URL 2개를 지정해준다./
를 사용할 경우에는 아무것도 붙이지 않음
인증 시에 URL 주의사항
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String uri = request.getRequestURI();
HttpSession session = request.getSession();
User sessionUser = (User) session.getAttribute("sessionUser");
if (sessionUser == null) {
if (uri.contains("/api")) {
throw new ExceptionApi401("인증이 필요합니다")
} else {
throw new Exception401("인증이 필요합니다");
}
}
- 수정 전 코드이다. 하지만 uri를 비교할 때 현재는
contains
를 사용하는데 만약contains(”/s”)
로 비교하여 오류를 강제로 발동시키게 될 경우에는,/s/api/service
처럼 처음에/s
로 시작하지 않아도throw
가 실행 될 수 있다.
- 이것을 방지하기 위해서는 아래의 코드처럼
startsWith
을 사용해야한다. 그러면 처음이/s
일 경우에만throw
가 실행이 된다.
if (uri.startsWith("/s")) {
if (sessionUser == null) throw new Exception401("인증이 필요합니다");
}
Share article