Skip to content

Commit

Permalink
feat($AuthCenter): add API for getting service info
Browse files Browse the repository at this point in the history
  • Loading branch information
Johnny Miller (锺俊) committed Dec 28, 2020
1 parent 6568f53 commit c0b00f3
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 29 deletions.
Original file line number Diff line number Diff line change
@@ -1,21 +1,14 @@
package com.jmsoftware.maf.authcenter.permission.controller;

import com.jmsoftware.maf.authcenter.permission.entity.GetServicesInfoResponse;
import com.jmsoftware.maf.authcenter.permission.service.PermissionService;
import com.jmsoftware.maf.authcenter.universal.configuration.ProjectProperty;
import com.jmsoftware.maf.common.bean.ResponseBodyBean;
import com.jmsoftware.maf.springbootstarter.helper.HttpApiScanHelper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import lombok.val;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.LinkedHashMap;
import java.util.List;

/**
* <h1>PermissionController</h1>
Expand All @@ -31,10 +24,6 @@
@Api(tags = {"Permission API"})
public class PermissionController {
private final PermissionService permissionService;
private final DiscoveryClient discoveryClient;
private final HttpApiScanHelper httpApiScanHelper;
private final ProjectProperty projectProperty;
private final RestTemplate restTemplate;

/**
* Services info response body bean.
Expand All @@ -46,20 +35,7 @@ public class PermissionController {
*/
@GetMapping("/permissions/services-info")
@ApiOperation(value = "Get services info", notes = "Get services info")
public ResponseBodyBean<?> servicesInfo() {
List<String> services = discoveryClient.getServices();
log.info("Service ID: {}", services);
val resultMap = new LinkedHashMap<String, Object>();
services.forEach(service -> {
val instances = discoveryClient.getInstances(service);
log.info("Instances: {}", instances);
resultMap.put(service, instances);
Object httpApiResources = restTemplate.getForObject(
"http://" + service + "/http-api-resources", Object.class);
log.info("httpApiResources: {}", httpApiResources);
});
val httpApiMap = httpApiScanHelper.scan(projectProperty.getBasePackage());
resultMap.put("httpApiMap", httpApiMap.toString());
return ResponseBodyBean.ofSuccess(resultMap);
public ResponseBodyBean<GetServicesInfoResponse> getServicesInfo() {
return ResponseBodyBean.ofSuccess(permissionService.getServicesInfo());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.jmsoftware.maf.authcenter.permission.entity;

import com.google.common.collect.Lists;
import com.jmsoftware.maf.common.domain.springbootstarter.HttpApiResourcesResponse;
import lombok.Data;

import java.util.List;

/**
* Description: GetServicesInfoResponse, change description here.
*
* @author 钟俊(zhongjun), email: zhongjun@toguide.cn, date: 12/28/2020 9:30 AM
**/
@Data
public class GetServicesInfoResponse {
private List<ServiceInfo> list = Lists.newLinkedList();

@Data
public static class ServiceInfo{
private String serviceId;
private HttpApiResourcesResponse httpApiResources;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.jmsoftware.maf.authcenter.permission.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jmsoftware.maf.authcenter.permission.entity.GetServicesInfoResponse;
import com.jmsoftware.maf.authcenter.permission.entity.PermissionPersistence;
import com.jmsoftware.maf.common.domain.authcenter.permission.GetPermissionListByRoleIdListPayload;
import com.jmsoftware.maf.common.domain.authcenter.permission.GetPermissionListByRoleIdListResponse;
Expand Down Expand Up @@ -46,12 +47,18 @@ public interface PermissionService extends IService<PermissionPersistence> {
*/
GetPermissionListByUserIdResponse getPermissionListByUserId(@NotNull Long userId);


/**
* Gets permission list by user id.
*
* @param userId the user id
* @return the permission list by user id
*/
List<PermissionPersistence> getPermissionPersistenceListByUserId(@NotNull Long userId);

/**
* Gets services info.
*
* @return the services info
*/
GetServicesInfoResponse getServicesInfo();
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,24 @@
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.jmsoftware.maf.authcenter.permission.entity.GetServicesInfoResponse;
import com.jmsoftware.maf.authcenter.permission.entity.PermissionPersistence;
import com.jmsoftware.maf.authcenter.permission.mapper.PermissionMapper;
import com.jmsoftware.maf.authcenter.permission.service.PermissionService;
import com.jmsoftware.maf.authcenter.universal.configuration.ProjectProperty;
import com.jmsoftware.maf.common.bean.ResponseBodyBean;
import com.jmsoftware.maf.common.domain.authcenter.permission.GetPermissionListByRoleIdListPayload;
import com.jmsoftware.maf.common.domain.authcenter.permission.GetPermissionListByRoleIdListResponse;
import com.jmsoftware.maf.common.domain.authcenter.permission.GetPermissionListByUserIdResponse;
import com.jmsoftware.maf.common.domain.springbootstarter.HttpApiResourcesResponse;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import lombok.val;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
Expand All @@ -26,8 +35,14 @@
* @author Johnny Miller (锺俊), e-mail: johnnysviva@outlook.com
* @date 5/11/20 8:34 AM
*/
@Service("permissionService")
@Slf4j
@Service
@RequiredArgsConstructor
public class PermissionServiceImpl extends ServiceImpl<PermissionMapper, PermissionPersistence> implements PermissionService {
private final DiscoveryClient discoveryClient;
private final ProjectProperty projectProperty;
private final RestTemplate restTemplate;

@Override
public GetPermissionListByRoleIdListResponse getPermissionListByRoleIdList(@Valid GetPermissionListByRoleIdListPayload payload) {
val permissionList = this.getPermissionListByRoleIdList(payload.getRoleIdList());
Expand Down Expand Up @@ -65,4 +80,28 @@ public GetPermissionListByUserIdResponse getPermissionListByUserId(@NotNull Long
public List<PermissionPersistence> getPermissionPersistenceListByUserId(@NotNull Long userId) {
return this.getBaseMapper().selectPermissionListByUserId(userId);
}

@Override
public GetServicesInfoResponse getServicesInfo() {
val serviceIdList = discoveryClient.getServices();
log.info("Getting service info from Service ID list: {}", serviceIdList);
GetServicesInfoResponse response = new GetServicesInfoResponse();
final ObjectMapper mapper = new ObjectMapper();
for (String serviceId : serviceIdList) {
if (serviceId.contains(projectProperty.getProjectArtifactId())) {
log.warn("Ignored service ID: {}", serviceId);
continue;
}
ResponseBodyBean<?> responseBodyBean = restTemplate.getForObject(
String.format("http://%s/http-api-resources", serviceId), ResponseBodyBean.class);
assert responseBodyBean != null;
HttpApiResourcesResponse httpApiResourcesResponse = mapper.convertValue(responseBodyBean.getData(),
HttpApiResourcesResponse.class);
GetServicesInfoResponse.ServiceInfo serviceInfo = new GetServicesInfoResponse.ServiceInfo();
serviceInfo.setServiceId(serviceId);
serviceInfo.setHttpApiResources(httpApiResourcesResponse);
response.getList().add(serviceInfo);
}
return response;
}
}

0 comments on commit c0b00f3

Please sign in to comment.