OWL ITS + 탐지시스템(인터넷 진흥원)
이민희
2022-01-10 e992e999b4de82ed5e727e5bf37bfc081c417ca5
Merge branch 'master' of http://192.168.0.25:9001/r/owl-kisa
2개 파일 추가됨
7개 파일 변경됨
143 ■■■■ 파일 변경됨
src/main/java/kr/wisestone/owl/config/SecurityConfiguration.java 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/config/SwaggerConfig.java 3 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/exception/ApiAuthException.java 40 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/exception/ApiParameterException.java 40 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/exception/OwlRuntimeException.java 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/ApiTokenServiceImpl.java 3 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java 13 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/controller/Api/ApiController.java 23 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/resolver/OwlResponseEntityExceptionHandler.java 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/config/SecurityConfiguration.java
@@ -145,7 +145,6 @@
                .antMatchers("/language/change").permitAll()
                .antMatchers("/security/*").permitAll()
                .antMatchers("/api/issue").permitAll()
                .antMatchers("/api/issue/*").permitAll()
                .antMatchers("/**/*").authenticated();
//        http.addFilter(new CustomAuthenticationFilter());
src/main/java/kr/wisestone/owl/config/SwaggerConfig.java
@@ -77,8 +77,7 @@
     */
    private Set<String> getConsumeContentTypes() {
        Set<String> consumes = new HashSet<>();
        consumes.add("application/json;charset=UTF-8");
        consumes.add("application/x-www-form-urlencoded");
        consumes.add("");
        return consumes;
    }
src/main/java/kr/wisestone/owl/exception/ApiAuthException.java
New file
@@ -0,0 +1,40 @@
package kr.wisestone.owl.exception;
import kr.wisestone.owl.vo.MessageVo;
public class ApiAuthException extends OwlRuntimeException {
    private static final long serialVersionUID = 1L;
    public ApiAuthException() {
        super();
    }
    public ApiAuthException(String code, final String message,
                                 final Throwable cause) {
        super(code, message, cause);
        this.code = code;
    }
    public ApiAuthException(String code, final String message) {
        super(message);
        this.code = code;
    }
    public ApiAuthException(MessageVo message) {
        super(message.getMessage());
        this.code = message.getCode();
    }
    public ApiAuthException(Exception e) {
        super(e);
    }
    public ApiAuthException(String code) {
        this.code = code;
    }
    public ApiAuthException(String code, Exception e) {
        super(e);
        this.code = code;
    }
}
src/main/java/kr/wisestone/owl/exception/ApiParameterException.java
New file
@@ -0,0 +1,40 @@
package kr.wisestone.owl.exception;
import kr.wisestone.owl.vo.MessageVo;
public class ApiParameterException extends OwlRuntimeException {
    private static final long serialVersionUID = 1L;
    public ApiParameterException() {
        super();
    }
    public ApiParameterException(String code, final String message,
                               final Throwable cause) {
        super(code, message, cause);
        this.code = code;
    }
    public ApiParameterException(String code, final String message) {
        super(message);
        this.code = code;
    }
    public ApiParameterException(MessageVo message) {
        super(message.getMessage());
        this.code = message.getCode();
    }
    public ApiParameterException(Exception e) {
        super(e);
    }
    public ApiParameterException(String code) {
        this.code = code;
    }
    public ApiParameterException(String code, Exception e) {
        super(e);
        this.code = code;
    }
}
src/main/java/kr/wisestone/owl/exception/OwlRuntimeException.java
@@ -6,7 +6,7 @@
public class OwlRuntimeException extends RuntimeException {
    private static final long serialVersionUID = 1L;
    private String code;
    protected String code;
    public OwlRuntimeException() {
        super();
src/main/java/kr/wisestone/owl/service/impl/ApiTokenServiceImpl.java
@@ -7,6 +7,7 @@
import kr.wisestone.owl.constant.MsgConstants;
import kr.wisestone.owl.domain.ApiToken;
import kr.wisestone.owl.domain.User;
import kr.wisestone.owl.exception.ApiAuthException;
import kr.wisestone.owl.exception.OwlRuntimeException;
import kr.wisestone.owl.repository.ApiTokenRepository;
import kr.wisestone.owl.service.ApiTokenService;
@@ -145,7 +146,7 @@
         {
             return userVo;
         } else  {
             throw new OwlRuntimeException(
             throw new ApiAuthException(
                     this.messageAccessor.getMessage(MsgConstants.ERROR_TOKEN));
         }
    }
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -11,6 +11,8 @@
import kr.wisestone.owl.domain.enumType.EmailType;
import kr.wisestone.owl.domain.enumType.IssueHistoryType;
import kr.wisestone.owl.domain.enumType.IssueStatusType;
import kr.wisestone.owl.exception.ApiAuthException;
import kr.wisestone.owl.exception.ApiParameterException;
import kr.wisestone.owl.exception.OwlRuntimeException;
import kr.wisestone.owl.mapper.DepartmentMapper;
import kr.wisestone.owl.mapper.IssueMapper;
@@ -235,14 +237,14 @@
    private IssueForm convertToIssueForm(IssueApiForm issueApiForm, User user) {
        if (issueApiForm.getIssueTypeId() == null) {
            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_PARAMETER_ISSUE_TYPE_ERROR));
            throw new ApiParameterException(this.messageAccessor.getMessage(MsgConstants.API_PARAMETER_ISSUE_TYPE_ERROR));
        }
        IssueForm issueForm = ConvertUtil.copyProperties(issueApiForm, IssueForm.class);
//        issueForm.setFiles(issueApiForm.getFiles());
        IssueType issueType = this.issueTypeService.getIssueType(issueApiForm.getIssueTypeId());
        if (issueType == null){
            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_PARAMETER_ISSUE_TYPE_ERROR));
            throw new ApiParameterException(this.messageAccessor.getMessage(MsgConstants.API_PARAMETER_ISSUE_TYPE_ERROR));
        }
        Workflow workflow = issueType.getWorkflow();
@@ -256,13 +258,13 @@
                }
            }
        } else if (issueApiForm.getIssueStatusId() == null){
            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_ISSUE_STATUS_NOT_EXIST));
            throw new ApiParameterException(this.messageAccessor.getMessage(MsgConstants.API_ISSUE_STATUS_NOT_EXIST));
        }
        // 프로젝트 입력
        Project project = issueType.getProject();
        if (project == null){
            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_PARAMETER_PROJECT_ERROR));
            throw new ApiParameterException(this.messageAccessor.getMessage(MsgConstants.API_PARAMETER_PROJECT_ERROR));
        }
        issueForm.setProjectId(project.getId());
@@ -321,7 +323,7 @@
            return issueForm;
        } else {
            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_USER_ERROR));
            throw new ApiAuthException(this.messageAccessor.getMessage(MsgConstants.API_USER_ERROR));
        }
    }
@@ -367,6 +369,7 @@
                issueForm.setIssueHostingFields(issueHostingFields);
            }
        }
        return issueForm;
    }
src/main/java/kr/wisestone/owl/web/controller/Api/ApiController.java
@@ -4,6 +4,7 @@
import io.swagger.annotations.ApiOperation;
import kr.wisestone.owl.constant.MsgConstants;
import kr.wisestone.owl.domain.Issue;
import kr.wisestone.owl.exception.ApiParameterException;
import kr.wisestone.owl.exception.OwlRuntimeException;
import kr.wisestone.owl.service.IssueService;
import kr.wisestone.owl.util.ConvertUtil;
@@ -12,6 +13,9 @@
import kr.wisestone.owl.web.form.ApiIssueModifyForm;
import kr.wisestone.owl.web.form.IssueApiForm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@@ -42,20 +46,22 @@
     */
    @PostMapping(value = "/issue")
    @ApiOperation(value = "이슈 추가", notes = "새로운 이슈를 추가한다.")
    @ApiImplicitParam(name = "files", required = false, dataType = "file")
    @ApiImplicitParam(name = "files", dataType = "file")
    @ResponseStatus(HttpStatus.CREATED)
    public
    @ResponseBody
    Map<String, Object> addIssue(ApiIssueAddForm apiIssueAddForm, @RequestParam("files") List<MultipartFile> files) throws OwlRuntimeException, CloneNotSupportedException {
    void addIssue(ApiIssueAddForm apiIssueAddForm, @RequestParam("files") List<MultipartFile> files)
            throws OwlRuntimeException, CloneNotSupportedException {
        Map<String, Object> resJsonData = new HashMap<>();
        IssueApiForm issueApiForm = ConvertUtil.copyProperties(apiIssueAddForm, IssueApiForm.class);
//        String str = request.getParameter(Constants.REQ_KEY_CONTENT);
//        String str = request.getParameter(Constants.REQ_KEY_C0NTENT);
        issueApiForm.setMultipartFiles(files);
        issueApiForm.parseCustomFields(apiIssueAddForm.getCustomFields());
        issueApiForm.setApiType(IssueApiForm.ApiType.add);
        // 사용자 정의 필드가 없을 경우 검색을 할 수 없기 때문에 예외처리
        if (issueApiForm.getCustomFieldValues() == null || issueApiForm.getCustomFieldValues().size() == 0) {
            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_CUSTOM_FIELD_NOT_EXIST));
            throw new ApiParameterException(this.messageAccessor.getMessage(MsgConstants.API_CUSTOM_FIELD_NOT_EXIST));
        }
        List<Issue> issues = this.issueService.addApiIssue(issueApiForm);
@@ -63,8 +69,6 @@
        for (Issue issue : issues) {
            this.issueService.addIssueVersion(issue.getId(), issue.getRegisterId());
        }
        return this.setSuccessMessage(resJsonData);
    }
    /**
@@ -74,11 +78,12 @@
     * @throws OwlRuntimeException 파라미터 오류시 발생
     * @throws CloneNotSupportedException 이슈 복사 시에 발생
     */
    @PostMapping(value = "/issue/1")
    @PutMapping(value = "/issue")
    @ApiOperation(value = "이슈 상태 수정", notes = "사용자 정의 필드가 동일한 기존 이슈를 변경한다.")
    @ResponseStatus(HttpStatus.OK)
    public
    @ResponseBody
    Map<String, Object> modifyIssue(ApiIssueModifyForm apiIssueModifyForm) throws OwlRuntimeException, CloneNotSupportedException {
    void modifyIssue(ApiIssueModifyForm apiIssueModifyForm) throws OwlRuntimeException, CloneNotSupportedException {
        Map<String, Object> resJsonData = new HashMap<>();
        IssueApiForm issueApiForm = ConvertUtil.copyProperties(apiIssueModifyForm, IssueApiForm.class);
@@ -90,8 +95,6 @@
        }
        this.issueService.modifyIssue(issueApiForm, new ArrayList<>());
        return this.setSuccessMessage(resJsonData);
    }
}
src/main/java/kr/wisestone/owl/web/resolver/OwlResponseEntityExceptionHandler.java
@@ -3,6 +3,8 @@
import kr.wisestone.owl.common.MessageAccessor;
import kr.wisestone.owl.constant.Constants;
import kr.wisestone.owl.constant.MsgConstants;
import kr.wisestone.owl.exception.ApiAuthException;
import kr.wisestone.owl.exception.ApiParameterException;
import kr.wisestone.owl.exception.OwlRuntimeException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -34,6 +36,22 @@
        super();
    }
    @ExceptionHandler({ApiParameterException.class })
    public ResponseEntity<Object> handleBadRequest(final ApiParameterException ex, final WebRequest request) {
        Map<String, Object> resJsonData = new HashMap<String, Object>();
        resJsonData.put(Constants.RES_KEY_MESSAGE, this.messageAccessor.getResMessage(ex, Constants.RES_KEY_MSG_FAIL));
        return this.handleExceptionInternal(ex, resJsonData, new HttpHeaders(), HttpStatus.BAD_REQUEST, request);
    }
    @ExceptionHandler({ApiAuthException.class })
    public ResponseEntity<Object> handleBadRequest(final ApiAuthException ex, final WebRequest request) {
        Map<String, Object> resJsonData = new HashMap<String, Object>();
        resJsonData.put(Constants.RES_KEY_MESSAGE, this.messageAccessor.getResMessage(ex, Constants.RES_KEY_MSG_FAIL));
        return this.handleExceptionInternal(ex, resJsonData, new HttpHeaders(), HttpStatus.UNAUTHORIZED, request);
    }
    @ExceptionHandler({OwlRuntimeException.class })
    public ResponseEntity<Object> handleBadRequest(final OwlRuntimeException ex, final WebRequest request) {
        Map<String, Object> resJsonData = new HashMap<String, Object>();