[api] SSO 관리 작업
This commit is contained in:
@@ -0,0 +1,127 @@
|
|||||||
|
package com.alist.api.modules.admin.sso;
|
||||||
|
|
||||||
|
import com.alist.api.common.response.ApiResponse;
|
||||||
|
import com.alist.api.common.response.ApiResponseCode;
|
||||||
|
import com.alist.api.modules.admin.sso.form.AdminSsoAddForm;
|
||||||
|
import com.alist.api.modules.admin.sso.form.AdminSsoDeleteForm;
|
||||||
|
import com.alist.api.modules.admin.sso.form.AdminSsoListForm;
|
||||||
|
import com.alist.api.modules.admin.sso.form.AdminSsoModifyForm;
|
||||||
|
import com.alist.api.modules.admin.sso.service.AdminSsoService;
|
||||||
|
import com.alist.api.modules.admin.sso.vo.*;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import jakarta.validation.Valid;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
@Tag(name = "505. SSO 클라이언트 관리", description = "관리자 SSO 클라이언트 관리 API")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/admin/sso")
|
||||||
|
public class AdminSsoController {
|
||||||
|
private final AdminSsoService adminSsoService;
|
||||||
|
|
||||||
|
public AdminSsoController(AdminSsoService adminSsoService) {
|
||||||
|
this.adminSsoService = adminSsoService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(
|
||||||
|
summary = "SSO 클라이언트 목록 조회"
|
||||||
|
, description = "관리자가 SSO 클라이언트 목록을 검색 조건과 페이징으로 조회합니다."
|
||||||
|
)
|
||||||
|
@GetMapping("/list")
|
||||||
|
public ResponseEntity<ApiResponse<AdminSsoListVo>> adminSsoList(
|
||||||
|
@ModelAttribute AdminSsoListForm adminSsoListForm
|
||||||
|
) {
|
||||||
|
AdminSsoListVo adminSsoListVo = adminSsoService.selectAdminSsoList(adminSsoListForm.toDto());
|
||||||
|
|
||||||
|
if (adminSsoListVo.getSsoList() == null || adminSsoListVo.getSsoList().isEmpty()) {
|
||||||
|
return ApiResponse.entity(adminSsoListVo, ApiResponseCode.CODE_2003);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ApiResponse.entity(adminSsoListVo, ApiResponseCode.CODE_2001, "SSO 클라이언트");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(
|
||||||
|
summary = "SSO 클라이언트 상세 조회"
|
||||||
|
, description = "관리자가 SSO 클라이언트 PK 기준으로 상세 정보를 조회합니다."
|
||||||
|
)
|
||||||
|
@GetMapping("/view")
|
||||||
|
public ResponseEntity<ApiResponse<AdminSsoViewVo>> adminSsoView(
|
||||||
|
@RequestParam Integer ssoClientIdx
|
||||||
|
) {
|
||||||
|
AdminSsoViewVo adminSsoViewVo = adminSsoService.selectAdminSsoView(ssoClientIdx);
|
||||||
|
|
||||||
|
if (adminSsoViewVo == null) {
|
||||||
|
return ApiResponse.entity((AdminSsoViewVo) null, ApiResponseCode.CODE_2003);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ApiResponse.entity(adminSsoViewVo, ApiResponseCode.CODE_2001, "SSO 클라이언트");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(
|
||||||
|
summary = "SSO 클라이언트 등록"
|
||||||
|
, description = "관리자가 SSO 클라이언트를 등록합니다. CLIENT_ID가 중복되면 등록하지 않습니다."
|
||||||
|
)
|
||||||
|
@PostMapping("/add")
|
||||||
|
public ResponseEntity<ApiResponse<AdminSsoAddVo>> adminSsoAdd(
|
||||||
|
@Valid @RequestBody AdminSsoAddForm adminSsoAddForm
|
||||||
|
) {
|
||||||
|
AdminSsoAddVo adminSsoAddVo = adminSsoService.insertAdminSsoAdd(adminSsoAddForm.toDto());
|
||||||
|
|
||||||
|
if (adminSsoAddVo.getResultCode() == 401) {
|
||||||
|
return ApiResponse.entity(adminSsoAddVo, ApiResponseCode.CODE_401);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!adminSsoAddVo.isProcessed()) {
|
||||||
|
return ApiResponse.entity(adminSsoAddVo, ApiResponseCode.CODE_2004, "SSO 클라이언트");
|
||||||
|
}
|
||||||
|
|
||||||
|
return ApiResponse.entity(adminSsoAddVo, ApiResponseCode.CODE_2002, "SSO 클라이언트");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(
|
||||||
|
summary = "SSO 클라이언트 수정"
|
||||||
|
, description = "관리자가 SSO 클라이언트 PK 기준으로 클라이언트 ID, 이름, redirect URI 등 기본 정보를 수정합니다."
|
||||||
|
)
|
||||||
|
@PutMapping("/modify")
|
||||||
|
public ResponseEntity<ApiResponse<AdminSsoModifyVo>> adminSsoModify(
|
||||||
|
@Valid @RequestBody AdminSsoModifyForm adminSsoModifyForm
|
||||||
|
) {
|
||||||
|
AdminSsoModifyVo adminSsoModifyVo = adminSsoService.updateAdminSsoModify(adminSsoModifyForm.toDto());
|
||||||
|
|
||||||
|
if (adminSsoModifyVo.getResultCode() == 401) {
|
||||||
|
return ApiResponse.entity(adminSsoModifyVo, ApiResponseCode.CODE_401);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (adminSsoModifyVo.getResultCode() == 2004) {
|
||||||
|
return ApiResponse.entity(adminSsoModifyVo, ApiResponseCode.CODE_2004, "SSO 클라이언트");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!adminSsoModifyVo.isProcessed()) {
|
||||||
|
return ApiResponse.entity(adminSsoModifyVo, ApiResponseCode.CODE_2003);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ApiResponse.entity(adminSsoModifyVo, ApiResponseCode.CODE_2005, "SSO 클라이언트 수정");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(
|
||||||
|
summary = "SSO 클라이언트 삭제"
|
||||||
|
, description = "관리자가 SSO 클라이언트 PK 기준으로 삭제 처리합니다. 실제 삭제가 아닌 DEL_YN 변경 방식입니다."
|
||||||
|
)
|
||||||
|
@PatchMapping("/delete")
|
||||||
|
public ResponseEntity<ApiResponse<AdminSsoDeleteVo>> adminSsoDelete(
|
||||||
|
@Valid @RequestBody AdminSsoDeleteForm adminSsoDeleteForm
|
||||||
|
) {
|
||||||
|
AdminSsoDeleteVo adminSsoDeleteVo = adminSsoService.updateAdminSsoDelete(adminSsoDeleteForm.toDto());
|
||||||
|
|
||||||
|
if (adminSsoDeleteVo.getResultCode() == 401) {
|
||||||
|
return ApiResponse.entity(adminSsoDeleteVo, ApiResponseCode.CODE_401);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!adminSsoDeleteVo.isProcessed()) {
|
||||||
|
return ApiResponse.entity(adminSsoDeleteVo, ApiResponseCode.CODE_2003);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ApiResponse.entity(adminSsoDeleteVo, ApiResponseCode.CODE_2005, "SSO 클라이언트 삭제");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.alist.api.modules.admin.sso.dto;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class AdminSsoAddDto {
|
||||||
|
private Integer ssoClientIdx;
|
||||||
|
private String clientId;
|
||||||
|
private String clientName;
|
||||||
|
private String redirectUri;
|
||||||
|
private String memo;
|
||||||
|
private String useYn;
|
||||||
|
private Integer createMember;
|
||||||
|
private Integer updateMember;
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package com.alist.api.modules.admin.sso.dto;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class AdminSsoDeleteDto {
|
||||||
|
private Integer ssoClientIdx;
|
||||||
|
private Integer updateMember;
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.alist.api.modules.admin.sso.dto;
|
||||||
|
|
||||||
|
import com.alist.api.common.paging.PageRequest;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class AdminSsoListDto extends PageRequest {
|
||||||
|
private String keyword;
|
||||||
|
private String useYn;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.alist.api.modules.admin.sso.dto;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class AdminSsoModifyDto {
|
||||||
|
private Integer ssoClientIdx;
|
||||||
|
private String clientId;
|
||||||
|
private String clientName;
|
||||||
|
private String redirectUri;
|
||||||
|
private String memo;
|
||||||
|
private String useYn;
|
||||||
|
private Integer updateMember;
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
package com.alist.api.modules.admin.sso.form;
|
||||||
|
|
||||||
|
import com.alist.api.modules.admin.sso.dto.AdminSsoAddDto;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.Pattern;
|
||||||
|
import jakarta.validation.constraints.Size;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Schema(description = "관리자 SSO 클라이언트 등록 요청")
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class AdminSsoAddForm {
|
||||||
|
@NotBlank
|
||||||
|
@Size(max = 100)
|
||||||
|
@Schema(description = "클라이언트 식별자", example = "a-campus-client", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private String clientId;
|
||||||
|
|
||||||
|
@NotBlank
|
||||||
|
@Size(max = 200)
|
||||||
|
@Schema(description = "클라이언트명", example = "a-campus.co.kr", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private String clientName;
|
||||||
|
|
||||||
|
@NotBlank
|
||||||
|
@Size(max = 500)
|
||||||
|
@Schema(description = "허용 redirect URI", example = "https://a-campus.co.kr/auth/callback", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private String redirectUri;
|
||||||
|
|
||||||
|
@Size(max = 500)
|
||||||
|
@Schema(description = "비고", example = "운영")
|
||||||
|
private String memo;
|
||||||
|
|
||||||
|
@Pattern(regexp = "Y|N")
|
||||||
|
@Schema(description = "사용 여부. Y: 사용, N: 미사용. 미입력 시 Y", example = "Y")
|
||||||
|
private String useYn;
|
||||||
|
|
||||||
|
public AdminSsoAddDto toDto() {
|
||||||
|
AdminSsoAddDto adminSsoAddDto = new AdminSsoAddDto();
|
||||||
|
adminSsoAddDto.setClientId(clientId.trim());
|
||||||
|
adminSsoAddDto.setClientName(clientName.trim());
|
||||||
|
adminSsoAddDto.setRedirectUri(redirectUri.trim());
|
||||||
|
adminSsoAddDto.setMemo(memo == null ? null : memo.trim());
|
||||||
|
adminSsoAddDto.setUseYn(useYn == null || useYn.trim().isEmpty() ? "Y" : useYn.trim());
|
||||||
|
return adminSsoAddDto;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package com.alist.api.modules.admin.sso.form;
|
||||||
|
|
||||||
|
import com.alist.api.modules.admin.sso.dto.AdminSsoDeleteDto;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Schema(description = "관리자 SSO 클라이언트 삭제 요청")
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class AdminSsoDeleteForm {
|
||||||
|
@NotNull
|
||||||
|
@Schema(description = "SSO 클라이언트 PK", example = "19", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private Integer ssoClientIdx;
|
||||||
|
|
||||||
|
public AdminSsoDeleteDto toDto() {
|
||||||
|
AdminSsoDeleteDto adminSsoDeleteDto = new AdminSsoDeleteDto();
|
||||||
|
adminSsoDeleteDto.setSsoClientIdx(ssoClientIdx);
|
||||||
|
return adminSsoDeleteDto;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package com.alist.api.modules.admin.sso.form;
|
||||||
|
|
||||||
|
import com.alist.api.common.paging.PageRequest;
|
||||||
|
import com.alist.api.modules.admin.sso.dto.AdminSsoListDto;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Schema(description = "관리자 SSO 클라이언트 목록 검색 조건")
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class AdminSsoListForm extends PageRequest {
|
||||||
|
@Schema(description = "검색어. 클라이언트 ID, 클라이언트명, redirect URI, 비고를 대상으로 검색합니다.", example = "client")
|
||||||
|
private String keyword;
|
||||||
|
|
||||||
|
@Schema(description = "사용 여부. Y: 사용, N: 미사용", example = "Y")
|
||||||
|
private String useYn;
|
||||||
|
|
||||||
|
public AdminSsoListDto toDto() {
|
||||||
|
AdminSsoListDto adminSsoListDto = new AdminSsoListDto();
|
||||||
|
adminSsoListDto.setPage(getPage());
|
||||||
|
adminSsoListDto.setSize(getSize());
|
||||||
|
adminSsoListDto.setKeyword(keyword == null ? null : keyword.trim());
|
||||||
|
adminSsoListDto.setUseYn(useYn == null ? null : useYn.trim());
|
||||||
|
return adminSsoListDto;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
package com.alist.api.modules.admin.sso.form;
|
||||||
|
|
||||||
|
import com.alist.api.modules.admin.sso.dto.AdminSsoModifyDto;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import jakarta.validation.constraints.Pattern;
|
||||||
|
import jakarta.validation.constraints.Size;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Schema(description = "관리자 SSO 클라이언트 수정 요청")
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class AdminSsoModifyForm {
|
||||||
|
@NotNull
|
||||||
|
@Schema(description = "SSO 클라이언트 PK", example = "19", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private Integer ssoClientIdx;
|
||||||
|
|
||||||
|
@NotBlank
|
||||||
|
@Size(max = 100)
|
||||||
|
@Schema(description = "클라이언트 식별자", example = "a-campus-client", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private String clientId;
|
||||||
|
|
||||||
|
@NotBlank
|
||||||
|
@Size(max = 200)
|
||||||
|
@Schema(description = "클라이언트명", example = "a-campus.co.kr", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private String clientName;
|
||||||
|
|
||||||
|
@NotBlank
|
||||||
|
@Size(max = 500)
|
||||||
|
@Schema(description = "허용 redirect URI", example = "https://a-campus.co.kr/auth/callback", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private String redirectUri;
|
||||||
|
|
||||||
|
@Size(max = 500)
|
||||||
|
@Schema(description = "비고", example = "운영")
|
||||||
|
private String memo;
|
||||||
|
|
||||||
|
@Pattern(regexp = "Y|N")
|
||||||
|
@Schema(description = "사용 여부. Y: 사용, N: 미사용. 미입력 시 Y", example = "Y")
|
||||||
|
private String useYn;
|
||||||
|
|
||||||
|
public AdminSsoModifyDto toDto() {
|
||||||
|
AdminSsoModifyDto adminSsoModifyDto = new AdminSsoModifyDto();
|
||||||
|
adminSsoModifyDto.setSsoClientIdx(ssoClientIdx);
|
||||||
|
adminSsoModifyDto.setClientId(clientId.trim());
|
||||||
|
adminSsoModifyDto.setClientName(clientName.trim());
|
||||||
|
adminSsoModifyDto.setRedirectUri(redirectUri.trim());
|
||||||
|
adminSsoModifyDto.setMemo(memo == null ? null : memo.trim());
|
||||||
|
adminSsoModifyDto.setUseYn(useYn == null || useYn.trim().isEmpty() ? "Y" : useYn.trim());
|
||||||
|
return adminSsoModifyDto;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package com.alist.api.modules.admin.sso.mapper;
|
||||||
|
|
||||||
|
import com.alist.api.modules.admin.sso.dto.AdminSsoAddDto;
|
||||||
|
import com.alist.api.modules.admin.sso.dto.AdminSsoDeleteDto;
|
||||||
|
import com.alist.api.modules.admin.sso.dto.AdminSsoListDto;
|
||||||
|
import com.alist.api.modules.admin.sso.dto.AdminSsoModifyDto;
|
||||||
|
import com.alist.api.modules.admin.sso.vo.AdminSsoViewVo;
|
||||||
|
import com.alist.api.modules.admin.sso.vo.AdminSsoVo;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface AdminSsoMapper {
|
||||||
|
int selectAdminSsoCount(AdminSsoListDto adminSsoListDto);
|
||||||
|
|
||||||
|
List<AdminSsoVo> selectAdminSsoList(AdminSsoListDto adminSsoListDto);
|
||||||
|
|
||||||
|
AdminSsoViewVo selectAdminSsoView(Integer ssoClientIdx);
|
||||||
|
|
||||||
|
int selectAdminSsoDuplicateCount(AdminSsoAddDto adminSsoAddDto);
|
||||||
|
|
||||||
|
int insertAdminSsoAdd(AdminSsoAddDto adminSsoAddDto);
|
||||||
|
|
||||||
|
int selectAdminSsoModifyDuplicateCount(AdminSsoModifyDto adminSsoModifyDto);
|
||||||
|
|
||||||
|
int updateAdminSsoModify(AdminSsoModifyDto adminSsoModifyDto);
|
||||||
|
|
||||||
|
int updateAdminSsoDelete(AdminSsoDeleteDto adminSsoDeleteDto);
|
||||||
|
}
|
||||||
@@ -0,0 +1,151 @@
|
|||||||
|
package com.alist.api.modules.admin.sso.service;
|
||||||
|
|
||||||
|
import com.alist.api.common.utils.SecurityUtil;
|
||||||
|
import com.alist.api.modules.admin.auth.mapper.AdminAuthMapper;
|
||||||
|
import com.alist.api.modules.admin.auth.vo.AdminAuthLoginVo;
|
||||||
|
import com.alist.api.modules.admin.sso.dto.AdminSsoAddDto;
|
||||||
|
import com.alist.api.modules.admin.sso.dto.AdminSsoDeleteDto;
|
||||||
|
import com.alist.api.modules.admin.sso.dto.AdminSsoListDto;
|
||||||
|
import com.alist.api.modules.admin.sso.dto.AdminSsoModifyDto;
|
||||||
|
import com.alist.api.modules.admin.sso.mapper.AdminSsoMapper;
|
||||||
|
import com.alist.api.modules.admin.sso.vo.*;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class AdminSsoService {
|
||||||
|
private final AdminSsoMapper adminSsoMapper;
|
||||||
|
private final AdminAuthMapper adminAuthMapper;
|
||||||
|
|
||||||
|
public AdminSsoService(AdminSsoMapper adminSsoMapper, AdminAuthMapper adminAuthMapper) {
|
||||||
|
this.adminSsoMapper = adminSsoMapper;
|
||||||
|
this.adminAuthMapper = adminAuthMapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(readOnly = true)
|
||||||
|
public AdminSsoListVo selectAdminSsoList(AdminSsoListDto adminSsoListDto) {
|
||||||
|
int totalCount = adminSsoMapper.selectAdminSsoCount(adminSsoListDto);
|
||||||
|
List<AdminSsoVo> ssoList = adminSsoMapper.selectAdminSsoList(adminSsoListDto);
|
||||||
|
|
||||||
|
AdminSsoListVo adminSsoListVo = new AdminSsoListVo();
|
||||||
|
adminSsoListVo.setSsoList(ssoList);
|
||||||
|
adminSsoListVo.setPaging(adminSsoListDto, totalCount);
|
||||||
|
|
||||||
|
return adminSsoListVo;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(readOnly = true)
|
||||||
|
public AdminSsoViewVo selectAdminSsoView(Integer ssoClientIdx) {
|
||||||
|
return adminSsoMapper.selectAdminSsoView(ssoClientIdx);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public AdminSsoAddVo insertAdminSsoAdd(AdminSsoAddDto adminSsoAddDto) {
|
||||||
|
AdminSsoAddVo adminSsoAddVo = new AdminSsoAddVo();
|
||||||
|
|
||||||
|
Integer loginUserTokenIdx = SecurityUtil.getLoginUserTokenIdx();
|
||||||
|
|
||||||
|
if (loginUserTokenIdx == null) {
|
||||||
|
adminSsoAddVo.setResultCode(401);
|
||||||
|
adminSsoAddVo.setProcessed(false);
|
||||||
|
return adminSsoAddVo;
|
||||||
|
}
|
||||||
|
|
||||||
|
AdminAuthLoginVo adminAuthLoginVo = adminAuthMapper.selectAdminTokenByUserTokenIdx(loginUserTokenIdx);
|
||||||
|
|
||||||
|
if (adminAuthLoginVo == null || adminAuthLoginVo.getUserIdx() == null) {
|
||||||
|
adminSsoAddVo.setResultCode(401);
|
||||||
|
adminSsoAddVo.setProcessed(false);
|
||||||
|
return adminSsoAddVo;
|
||||||
|
}
|
||||||
|
|
||||||
|
adminSsoAddDto.setCreateMember(adminAuthLoginVo.getUserIdx());
|
||||||
|
adminSsoAddDto.setUpdateMember(adminAuthLoginVo.getUserIdx());
|
||||||
|
|
||||||
|
int duplicateCount = adminSsoMapper.selectAdminSsoDuplicateCount(adminSsoAddDto);
|
||||||
|
|
||||||
|
if (duplicateCount > 0) {
|
||||||
|
adminSsoAddVo.setResultCode(2004);
|
||||||
|
adminSsoAddVo.setProcessed(false);
|
||||||
|
return adminSsoAddVo;
|
||||||
|
}
|
||||||
|
|
||||||
|
int insertCount = adminSsoMapper.insertAdminSsoAdd(adminSsoAddDto);
|
||||||
|
|
||||||
|
adminSsoAddVo.setResultCode(2002);
|
||||||
|
adminSsoAddVo.setProcessed(insertCount > 0);
|
||||||
|
adminSsoAddVo.setSsoClientIdx(adminSsoAddDto.getSsoClientIdx());
|
||||||
|
|
||||||
|
return adminSsoAddVo;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public AdminSsoModifyVo updateAdminSsoModify(AdminSsoModifyDto adminSsoModifyDto) {
|
||||||
|
AdminSsoModifyVo adminSsoModifyVo = new AdminSsoModifyVo();
|
||||||
|
|
||||||
|
Integer loginUserTokenIdx = SecurityUtil.getLoginUserTokenIdx();
|
||||||
|
|
||||||
|
if (loginUserTokenIdx == null) {
|
||||||
|
adminSsoModifyVo.setResultCode(401);
|
||||||
|
adminSsoModifyVo.setProcessed(false);
|
||||||
|
return adminSsoModifyVo;
|
||||||
|
}
|
||||||
|
|
||||||
|
AdminAuthLoginVo adminAuthLoginVo = adminAuthMapper.selectAdminTokenByUserTokenIdx(loginUserTokenIdx);
|
||||||
|
|
||||||
|
if (adminAuthLoginVo == null || adminAuthLoginVo.getUserIdx() == null) {
|
||||||
|
adminSsoModifyVo.setResultCode(401);
|
||||||
|
adminSsoModifyVo.setProcessed(false);
|
||||||
|
return adminSsoModifyVo;
|
||||||
|
}
|
||||||
|
|
||||||
|
adminSsoModifyDto.setUpdateMember(adminAuthLoginVo.getUserIdx());
|
||||||
|
|
||||||
|
int duplicateCount = adminSsoMapper.selectAdminSsoModifyDuplicateCount(adminSsoModifyDto);
|
||||||
|
|
||||||
|
if (duplicateCount > 0) {
|
||||||
|
adminSsoModifyVo.setResultCode(2004);
|
||||||
|
adminSsoModifyVo.setProcessed(false);
|
||||||
|
return adminSsoModifyVo;
|
||||||
|
}
|
||||||
|
|
||||||
|
int updateCount = adminSsoMapper.updateAdminSsoModify(adminSsoModifyDto);
|
||||||
|
|
||||||
|
adminSsoModifyVo.setResultCode(2005);
|
||||||
|
adminSsoModifyVo.setProcessed(updateCount > 0);
|
||||||
|
|
||||||
|
return adminSsoModifyVo;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public AdminSsoDeleteVo updateAdminSsoDelete(AdminSsoDeleteDto adminSsoDeleteDto) {
|
||||||
|
AdminSsoDeleteVo adminSsoDeleteVo = new AdminSsoDeleteVo();
|
||||||
|
|
||||||
|
Integer loginUserTokenIdx = SecurityUtil.getLoginUserTokenIdx();
|
||||||
|
|
||||||
|
if (loginUserTokenIdx == null) {
|
||||||
|
adminSsoDeleteVo.setResultCode(401);
|
||||||
|
adminSsoDeleteVo.setProcessed(false);
|
||||||
|
return adminSsoDeleteVo;
|
||||||
|
}
|
||||||
|
|
||||||
|
AdminAuthLoginVo adminAuthLoginVo = adminAuthMapper.selectAdminTokenByUserTokenIdx(loginUserTokenIdx);
|
||||||
|
|
||||||
|
if (adminAuthLoginVo == null || adminAuthLoginVo.getUserIdx() == null) {
|
||||||
|
adminSsoDeleteVo.setResultCode(401);
|
||||||
|
adminSsoDeleteVo.setProcessed(false);
|
||||||
|
return adminSsoDeleteVo;
|
||||||
|
}
|
||||||
|
|
||||||
|
adminSsoDeleteDto.setUpdateMember(adminAuthLoginVo.getUserIdx());
|
||||||
|
|
||||||
|
int updateCount = adminSsoMapper.updateAdminSsoDelete(adminSsoDeleteDto);
|
||||||
|
|
||||||
|
adminSsoDeleteVo.setResultCode(2005);
|
||||||
|
adminSsoDeleteVo.setProcessed(updateCount > 0);
|
||||||
|
|
||||||
|
return adminSsoDeleteVo;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package com.alist.api.modules.admin.sso.vo;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Schema(description = "관리자 SSO 클라이언트 등록 응답")
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class AdminSsoAddVo {
|
||||||
|
@Schema(description = "SSO 클라이언트 등록 여부", example = "true")
|
||||||
|
private boolean processed;
|
||||||
|
|
||||||
|
@Schema(description = "등록된 SSO 클라이언트 PK", example = "19")
|
||||||
|
private Integer ssoClientIdx;
|
||||||
|
|
||||||
|
@JsonIgnore
|
||||||
|
@Schema(hidden = true)
|
||||||
|
private int resultCode;
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.alist.api.modules.admin.sso.vo;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Schema(description = "관리자 SSO 클라이언트 삭제 응답")
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class AdminSsoDeleteVo {
|
||||||
|
@Schema(description = "SSO 클라이언트 삭제 여부", example = "true")
|
||||||
|
private boolean processed;
|
||||||
|
|
||||||
|
@JsonIgnore
|
||||||
|
@Schema(hidden = true)
|
||||||
|
private int resultCode;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.alist.api.modules.admin.sso.vo;
|
||||||
|
|
||||||
|
import com.alist.api.common.paging.PageResponse;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Schema(description = "관리자 SSO 클라이언트 목록 조회 응답")
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class AdminSsoListVo extends PageResponse {
|
||||||
|
@Schema(description = "SSO 클라이언트 목록")
|
||||||
|
private List<AdminSsoVo> ssoList;
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.alist.api.modules.admin.sso.vo;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Schema(description = "관리자 SSO 클라이언트 수정 응답")
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class AdminSsoModifyVo {
|
||||||
|
@Schema(description = "SSO 클라이언트 수정 여부", example = "true")
|
||||||
|
private boolean processed;
|
||||||
|
|
||||||
|
@JsonIgnore
|
||||||
|
@Schema(hidden = true)
|
||||||
|
private int resultCode;
|
||||||
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
package com.alist.api.modules.admin.sso.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@Schema(description = "관리자 SSO 클라이언트 상세 조회 응답")
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class AdminSsoViewVo {
|
||||||
|
@Schema(description = "SSO 클라이언트 PK", example = "19")
|
||||||
|
private Integer ssoClientIdx;
|
||||||
|
|
||||||
|
@Schema(description = "클라이언트 식별자", example = "a-campus-client")
|
||||||
|
private String clientId;
|
||||||
|
|
||||||
|
@Schema(description = "클라이언트명", example = "a-campus.co.kr")
|
||||||
|
private String clientName;
|
||||||
|
|
||||||
|
@Schema(description = "허용 redirect URI", example = "https://a-campus.co.kr/")
|
||||||
|
private String redirectUri;
|
||||||
|
|
||||||
|
@Schema(description = "비고", example = "운영")
|
||||||
|
private String memo;
|
||||||
|
|
||||||
|
@Schema(description = "사용 여부", example = "Y")
|
||||||
|
private String useYn;
|
||||||
|
|
||||||
|
@Schema(description = "삭제 여부", example = "N")
|
||||||
|
private String delYn;
|
||||||
|
|
||||||
|
@Schema(description = "등록일시", example = "2026-04-06 17:28:56")
|
||||||
|
private LocalDateTime createDate;
|
||||||
|
|
||||||
|
@Schema(description = "등록자", example = "1")
|
||||||
|
private Integer createMember;
|
||||||
|
|
||||||
|
@Schema(description = "수정일시", example = "2026-04-06 17:28:56")
|
||||||
|
private LocalDateTime updateDate;
|
||||||
|
|
||||||
|
@Schema(description = "마지막 수정자", example = "1")
|
||||||
|
private Integer updateMember;
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package com.alist.api.modules.admin.sso.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@Schema(description = "관리자 SSO 클라이언트 목록 항목")
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class AdminSsoVo {
|
||||||
|
@Schema(description = "SSO 클라이언트 PK", example = "19")
|
||||||
|
private Integer ssoClientIdx;
|
||||||
|
|
||||||
|
@Schema(description = "클라이언트 식별자", example = "a-campus-client")
|
||||||
|
private String clientId;
|
||||||
|
|
||||||
|
@Schema(description = "클라이언트명", example = "https://a-campus.co.kr/")
|
||||||
|
private String clientName;
|
||||||
|
|
||||||
|
@Schema(description = "허용 redirect URI", example = "https://a-campus.co.kr/")
|
||||||
|
private String redirectUri;
|
||||||
|
|
||||||
|
@Schema(description = "비고", example = "운영")
|
||||||
|
private String memo;
|
||||||
|
|
||||||
|
@Schema(description = "사용 여부", example = "Y")
|
||||||
|
private String useYn;
|
||||||
|
|
||||||
|
@Schema(description = "생성일", example = "2026-04-06 17:28:56")
|
||||||
|
private LocalDateTime createDate;
|
||||||
|
|
||||||
|
@Schema(description = "수정일", example = "2026-04-06 17:28:56")
|
||||||
|
private LocalDateTime updateDate;
|
||||||
|
}
|
||||||
@@ -4,7 +4,7 @@ import lombok.Getter;
|
|||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
public class SsoClientVo {
|
public class SsoClientVo {
|
||||||
private Long ssoClientIdx;
|
private Integer ssoClientIdx;
|
||||||
private String clientId;
|
private String clientId;
|
||||||
private String clientName;
|
private String clientName;
|
||||||
private String redirectUri;
|
private String redirectUri;
|
||||||
|
|||||||
@@ -0,0 +1,123 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
|
||||||
|
<mapper namespace="com.alist.api.modules.admin.sso.mapper.AdminSsoMapper">
|
||||||
|
<sql id="adminSsoWhere">
|
||||||
|
FROM ALISTLMS.SSO_CLIENT SC
|
||||||
|
WHERE SC.DEL_YN = 'N'
|
||||||
|
<if test="keyword != null and keyword != ''">
|
||||||
|
AND (
|
||||||
|
SC.CLIENT_ID LIKE CONCAT('%', #{keyword}, '%')
|
||||||
|
OR SC.CLIENT_NAME LIKE CONCAT('%', #{keyword}, '%')
|
||||||
|
OR SC.REDIRECT_URI LIKE CONCAT('%', #{keyword}, '%')
|
||||||
|
OR SC.MEMO LIKE CONCAT('%', #{keyword}, '%')
|
||||||
|
)
|
||||||
|
</if>
|
||||||
|
<if test="useYn != null and useYn != ''">
|
||||||
|
AND SC.USE_YN = #{useYn}
|
||||||
|
</if>
|
||||||
|
</sql>
|
||||||
|
|
||||||
|
<select id="selectAdminSsoCount" resultType="int">
|
||||||
|
/*AdminSsoMapper.selectAdminSsoCount*/
|
||||||
|
SELECT COUNT(*)
|
||||||
|
<include refid="adminSsoWhere"/>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectAdminSsoList" resultType="com.alist.api.modules.admin.sso.vo.AdminSsoVo">
|
||||||
|
/*AdminSsoMapper.selectAdminSsoList*/
|
||||||
|
SELECT SC.SSO_CLIENT_IDX
|
||||||
|
, SC.CLIENT_ID
|
||||||
|
, SC.CLIENT_NAME
|
||||||
|
, SC.REDIRECT_URI
|
||||||
|
, SC.MEMO
|
||||||
|
, SC.USE_YN
|
||||||
|
, SC.CREATE_DATE
|
||||||
|
, SC.UPDATE_DATE
|
||||||
|
<include refid="adminSsoWhere"/>
|
||||||
|
ORDER BY SC.SSO_CLIENT_IDX DESC
|
||||||
|
LIMIT #{limit}
|
||||||
|
OFFSET #{offset}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectAdminSsoView" resultType="com.alist.api.modules.admin.sso.vo.AdminSsoViewVo">
|
||||||
|
/*AdminSsoMapper.selectAdminSsoView*/
|
||||||
|
SELECT SC.SSO_CLIENT_IDX
|
||||||
|
, SC.CLIENT_ID
|
||||||
|
, SC.CLIENT_NAME
|
||||||
|
, SC.REDIRECT_URI
|
||||||
|
, SC.MEMO
|
||||||
|
, SC.USE_YN
|
||||||
|
, SC.DEL_YN
|
||||||
|
, SC.CREATE_DATE
|
||||||
|
, SC.CREATE_MEMBER
|
||||||
|
, SC.UPDATE_DATE
|
||||||
|
, SC.UPDATE_MEMBER
|
||||||
|
FROM ALISTLMS.SSO_CLIENT SC
|
||||||
|
WHERE SC.SSO_CLIENT_IDX = #{ssoClientIdx}
|
||||||
|
AND SC.DEL_YN = 'N'
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectAdminSsoDuplicateCount" resultType="int">
|
||||||
|
/*AdminSsoMapper.selectAdminSsoDuplicateCount*/
|
||||||
|
SELECT COUNT(*)
|
||||||
|
FROM ALISTLMS.SSO_CLIENT SC
|
||||||
|
WHERE SC.DEL_YN = 'N'
|
||||||
|
AND SC.CLIENT_ID = #{clientId}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectAdminSsoModifyDuplicateCount" resultType="int">
|
||||||
|
/*AdminSsoMapper.selectAdminSsoModifyDuplicateCount*/
|
||||||
|
SELECT COUNT(*)
|
||||||
|
FROM ALISTLMS.SSO_CLIENT SC
|
||||||
|
WHERE SC.DEL_YN = 'N'
|
||||||
|
AND SC.CLIENT_ID = #{clientId}
|
||||||
|
AND SC.SSO_CLIENT_IDX != #{ssoClientIdx}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<insert id="insertAdminSsoAdd" parameterType="com.alist.api.modules.admin.sso.dto.AdminSsoAddDto" useGeneratedKeys="true" keyProperty="ssoClientIdx">
|
||||||
|
/*AdminSsoMapper.insertAdminSsoAdd*/
|
||||||
|
INSERT INTO ALISTLMS.SSO_CLIENT (
|
||||||
|
CLIENT_ID
|
||||||
|
, CLIENT_NAME
|
||||||
|
, REDIRECT_URI
|
||||||
|
, MEMO
|
||||||
|
, USE_YN
|
||||||
|
, DEL_YN
|
||||||
|
, CREATE_MEMBER
|
||||||
|
, UPDATE_MEMBER
|
||||||
|
) VALUES (
|
||||||
|
#{clientId}
|
||||||
|
, #{clientName}
|
||||||
|
, #{redirectUri}
|
||||||
|
, #{memo}
|
||||||
|
, #{useYn}
|
||||||
|
, 'N'
|
||||||
|
, #{createMember}
|
||||||
|
, #{updateMember}
|
||||||
|
)
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
|
||||||
|
<update id="updateAdminSsoModify" parameterType="com.alist.api.modules.admin.sso.dto.AdminSsoModifyDto">
|
||||||
|
/*AdminSsoMapper.updateAdminSsoModify*/
|
||||||
|
UPDATE ALISTLMS.SSO_CLIENT
|
||||||
|
SET CLIENT_ID = #{clientId}
|
||||||
|
, CLIENT_NAME = #{clientName}
|
||||||
|
, REDIRECT_URI = #{redirectUri}
|
||||||
|
, MEMO = #{memo}
|
||||||
|
, USE_YN = #{useYn}
|
||||||
|
, UPDATE_MEMBER = #{updateMember}
|
||||||
|
WHERE SSO_CLIENT_IDX = #{ssoClientIdx}
|
||||||
|
AND DEL_YN = 'N'
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<update id="updateAdminSsoDelete" parameterType="com.alist.api.modules.admin.sso.dto.AdminSsoDeleteDto">
|
||||||
|
/*AdminSsoMapper.updateAdminSsoDelete*/
|
||||||
|
UPDATE ALISTLMS.SSO_CLIENT
|
||||||
|
SET DEL_YN = 'Y'
|
||||||
|
, UPDATE_MEMBER = #{updateMember}
|
||||||
|
WHERE SSO_CLIENT_IDX = #{ssoClientIdx}
|
||||||
|
AND DEL_YN = 'N'
|
||||||
|
</update>
|
||||||
|
</mapper>
|
||||||
Reference in New Issue
Block a user