Explorar o código

login/out api add, cors config add

shjung %!s(int64=3) %!d(string=hai) anos
pai
achega
b4bf283d2b

+ 46 - 0
src/main/java/com/its/api/its/controller/LoginController.java

@@ -0,0 +1,46 @@
+package com.its.api.its.controller;
+
+import com.its.api.its.model.dto.LoginDto;
+import com.its.api.its.service.LoginService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+
+@Slf4j
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/api/auth")
+@Api(tags = "00.공통-00.로그인/로그아웃")
+public class LoginController {
+
+    private final LoginService service;
+/*
+    @GetMapping(value = "/proxy/xxx", produces = {"application/json; charset=utf8"})
+    public String proxy() {
+        String url = "http://localhost/api/xxx";
+
+        RestTemplate restTemplate = new RestTemplate();
+        return restTemplate.getForObject(url, String.class);
+    }
+*/
+
+    @ApiOperation(value = "로그인", response = LoginDto.class)
+    @PostMapping(value = "/login", produces = {"application/json; charset=utf8"})
+    public LoginDto login(@RequestBody @Valid final LoginDto.LoginReqDto req) {
+        return this.service.login(req);
+    }
+
+    @ApiOperation(value = "로그아웃")
+    @PostMapping(value = "/logout", produces = {"application/json; charset=utf8"})
+    public void logout(@RequestBody @Valid final LoginDto.LogoutReqDto req) {
+        this.service.logout(req);
+    }
+
+}

+ 109 - 0
src/main/java/com/its/api/its/model/dto/LoginDto.java

@@ -0,0 +1,109 @@
+package com.its.api.its.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.its.api.its.model.entity.oper.TbUserCnncHs;
+import com.its.api.its.model.entity.oper.TbUserInfr;
+import com.its.api.utils.ItsUtils;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+/**
+ * 로그인/아웃 요청 DTO Class
+ */
+@Data
+@Builder
+@ApiModel("LoginDto(로그인 정보)")
+public class LoginDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("사용자ID")  // N VARCHAR(20)
+    @JsonProperty("user_id")
+    private String userId;
+
+    @ApiModelProperty("로그인시각")
+    @JsonProperty("login_hms")
+    private String loginHms;
+
+    @ApiModelProperty("로그인 결과(success, fail")
+    @JsonProperty("login_result")
+    private String loginResult;
+
+    @ApiModelProperty("권한")
+    @JsonProperty("role")
+    private String role;
+
+    @ApiModel("LoginReqDto(로그인 요청)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class LoginReqDto {
+
+        @ApiModelProperty("사용자ID, Nullable = N, VARCHAR(20)")  // N VARCHAR(20)
+        @JsonProperty("user_id")
+        @Size(min=1, max=20)
+        private String userId;
+
+        @ApiModelProperty("암호, Nullable = Y, VARCHAR(64)")  // Y VARCHAR(64)
+        @JsonProperty("pwd")
+        @Size(min=1, max=64)
+        private String pwd;
+
+        @Builder
+        public LoginReqDto(String user_id, String pwd) {
+            this.userId = user_id;
+            this.pwd = pwd;
+        }
+
+        public TbUserInfr toEntity() {
+            return TbUserInfr.builder()
+                    .userId(this.userId)
+                    .pwd(this.pwd)
+                    .build();
+        }
+
+        public TbUserCnncHs toCnnsHsEntity() {
+            return TbUserCnncHs.builder()
+                    .userId(this.userId)
+                    .loginHms(ItsUtils.getSysTime())
+                    .logoutHms("")
+                    .build();
+        }
+    }
+
+    @ApiModel("LogoutReqDto(로그아웃 요청)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class LogoutReqDto {
+
+        @ApiModelProperty("사용자ID, Nullable = N, VARCHAR(20)")  // N VARCHAR(20)
+        @JsonProperty("user_id")
+        @Size(min=1, max=20)
+        private String userId;
+
+        @ApiModelProperty("로그인시각")  // N VARCHAR(14)
+        @JsonProperty("login_hms")
+        private String loginHms;
+
+        @Builder
+        public LogoutReqDto(String user_id, String login_hms) {
+            this.userId = user_id;
+        }
+
+        public TbUserCnncHs toCnnsHsEntity() {
+            return TbUserCnncHs.builder()
+                    .userId(this.userId)
+                    .loginHms(this.loginHms)
+                    .logoutHms(ItsUtils.getSysTime())
+                    .build();
+        }
+
+    }
+
+}

+ 1 - 3
src/main/java/com/its/api/its/model/dto/oper/TbGropMenuAthrDto.java

@@ -86,13 +86,11 @@ public class TbGropMenuAthrDto implements Serializable {
         }
 
         public TbGropMenuAthr toEntity() {
-            TbGropMenuAthr entity = TbGropMenuAthr.builder()
+            return TbGropMenuAthr.builder()
                     .gropId(this.gropId)
                     .operSystMenuId(this.operSystMenuId)
                     .athrYn(this.athrYn)
                     .build();
-
-            return entity;
         }
 
     }

+ 1 - 3
src/main/java/com/its/api/its/model/dto/oper/TbUserInfrDto.java

@@ -188,7 +188,7 @@ public class TbUserInfrDto implements Serializable {
         }
 
         public TbUserInfr toEntity() {
-            TbUserInfr entity = TbUserInfr.builder()
+            return TbUserInfr.builder()
                     .userId(this.userId)
                     .pwd(this.pwd)
                     .name(this.name)
@@ -205,8 +205,6 @@ public class TbUserInfrDto implements Serializable {
                     .gropId(this.gropId)
                     .operSystId(this.operSystId)
                     .build();
-
-            return entity;
         }
 
     }

+ 60 - 0
src/main/java/com/its/api/its/service/LoginService.java

@@ -0,0 +1,60 @@
+package com.its.api.its.service;
+
+import com.its.api.its.model.dto.LoginDto;
+import com.its.api.its.model.entity.oper.TbUserCnncHs;
+import com.its.api.its.model.entity.oper.TbUserInfr;
+import com.its.api.its.repository.oper.TbUserCnncHsRepository;
+import com.its.api.its.repository.oper.TbUserInfrRepository;
+import com.its.api.utils.ItsUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.Optional;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class LoginService {
+
+    private final TbUserInfrRepository userRepo;
+    private final TbUserCnncHsRepository cnncHsRepo;
+
+    /**
+     * 로그인 처리
+     * @param req
+     * @return
+     */
+    public LoginDto login(LoginDto.LoginReqDto req) {
+
+        LoginDto result = LoginDto.builder()
+                .userId(req.getUserId())
+                .loginHms(ItsUtils.getSysTime())
+                .build();
+
+        Optional<TbUserInfr> userInfr = this.userRepo.findById(req.getUserId());
+        if (userInfr.isPresent()) {
+            // found
+            result.setLoginResult("success");
+
+            TbUserCnncHs cnncHs = req.toCnnsHsEntity();
+            this.cnncHsRepo.save(cnncHs);
+        }
+        else {
+            // not found
+            result.setLoginResult("fail");
+        }
+
+        return result;
+    }
+
+    /**
+     * 로그아웃 처리
+     * @param req
+     */
+    public void logout(LoginDto.LogoutReqDto req) {
+
+        TbUserCnncHs cnncHs = req.toCnnsHsEntity();
+        this.cnncHsRepo.save(cnncHs);
+    }
+}

+ 19 - 0
src/main/java/com/its/api/webapp/config/WebConfig.java

@@ -0,0 +1,19 @@
+package com.its.api.webapp.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class WebConfig implements WebMvcConfigurer {
+
+    @Override
+    public void addCorsMappings(CorsRegistry registry) {
+        registry.addMapping("/**")
+                .allowedOrigins("*")                            //허용할 Origin(요청 url) : "*" 의 경우 모두 허용
+                .allowedMethods("GET", "POST", "PUT", "DELETE") //허용할 request http METHOD : POST, GET, DELETE, PUT
+                .maxAge(3600)                                   //브라우저 캐시 시간(단위: 초) : "3600" 이면 최소 1시간 안에는 서버로 재요청 되지 않음
+        ;
+    }
+
+}