[Practice] 인터셉터 활용 (1)
2021. 4. 19. 16:25ㆍSpring/Practice
1. 문제
- 인터셉터를 이용하여 API 요청에 대한 정보를 log에 기록하는 기능
- 글목록 API 호출 ("/api/board")
2. 풀이
- ApiBoardService.java
package com.example.jpa.sample.board.service;
import com.example.jpa.sample.board.entity.Board;
import com.example.jpa.sample.board.entity.BoardBadReport;
import com.example.jpa.sample.board.entity.BoardComment;
import com.example.jpa.sample.board.entity.BoardType;
import com.example.jpa.sample.board.model.*;
import java.util.List;
public interface BoardService {
...
List<Board> list();
}
- BoardServiceImpl.java
package com.example.jpa.sample.board.service;
import com.example.jpa.sample.board.entity.*;
import com.example.jpa.sample.board.model.*;
import com.example.jpa.sample.board.repository.*;
import com.example.jpa.sample.common.exception.BizException;
import com.example.jpa.sample.user.entity.User;
import com.example.jpa.sample.user.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
@RequiredArgsConstructor
@Service
public class BoardServiceImpl implements BoardService {
...
@Override
public List<Board> list() {
return boardRepository.findAll();
}
}
- ApiBoardController.java
package com.example.jpa.sample.board.controller;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.example.jpa.sample.board.entity.Board;
import com.example.jpa.sample.board.entity.BoardType;
import com.example.jpa.sample.board.model.*;
import com.example.jpa.sample.board.service.BoardService;
import com.example.jpa.sample.common.exception.BizException;
import com.example.jpa.sample.common.model.ResponseResult;
import com.example.jpa.sample.notice.model.ResponseError;
import com.example.jpa.sample.user.model.ResponseMessage;
import com.example.jpa.sample.util.JwtUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
@RequiredArgsConstructor
@RestController
public class ApiBoardController {
private final BoardService boardService;
...
//------------------------------------------------------------------------------
// 문제 1
@GetMapping("/api/board")
public ResponseEntity<?> list() {
List<Board> list = boardService.list();
return ResponseResult.success(list);
}
}
- WebMvcConfig.java
package com.example.jpa.sample.config;
import com.example.jpa.sample.common.interceptor.CommonInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new CommonInterceptor());
}
}
- CommonInterceptor.java
package com.example.jpa.sample.common.interceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Slf4j
public class CommonInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("#################################");
log.info("[인터셉터] - preHandler 시작");
// 요청한 Method, URI 정보
log.info(request.getMethod());
log.info(request.getRequestURI());
return true;
}
}
728x90
'Spring > Practice' 카테고리의 다른 글
[Practice] Open API 연동 시 API 프로퍼티 활용 (0) | 2021.04.20 |
---|---|
[Practice] 인터셉터 활용 (2) (0) | 2021.04.20 |
[Practice] 사용자 관련 API 만들기 (8) (0) | 2021.04.19 |
[Practice] 사용자 관련 API 만들기 (7) (0) | 2021.04.19 |