Jelajahi Sumber

下载算法平台文件

LingxinMeng 1 tahun lalu
induk
melakukan
d537d8dcc5

+ 30 - 25
api-common/src/main/java/api/common/util/HttpUtil.java

@@ -286,31 +286,36 @@ public class HttpUtil {
     /**
      * 自定义请求头的 post 请求
      */
-    public static String post(String url, Map<String, String> headers, Map<String, String> params) throws IOException {
-        CloseableHttpClient closeableHttpClient = getCloseableHttpClient();
-        RequestConfig requestConfig = getRequestConfig();
-        //1 创建 post 请求
-        HttpPost post = new HttpPost(url);
-        //2 设置请求默认配置
-        post.setConfig(requestConfig);
-        //3 设置请求头 post.setHeader("Content-type", "application/json; charset=utf-8");
-        if (!CollectionUtil.isEmpty(headers)) {
-            headers.forEach(post::setHeader);
-        }
-        //4 设置请求体
-        post.addHeader("Content-Type", "application/json");
-        if (!CollectionUtil.isEmpty(params)) {
-            post.setEntity(new StringEntity(JsonUtil.beanToJson(params), "utf-8"));
-        }
-        //5 发送请求
-        CloseableHttpResponse response = closeableHttpClient.execute(post);
-        //6 处理返回结果,
-        //6-1 如果状态码为200,就是正常返回
-        int statusCode = response.getStatusLine().getStatusCode();
-        if (statusCode == 200) {
-            return EntityUtils.toString(response.getEntity());
-        } else {
-            throw new RuntimeException("请求错误:" + statusCode);
+    public static String post(String url, Map<String, String> headers, Map<String, String> params){
+        log.info("发送HTTP请求:" + url+",请求参数:"+params+",请求头:"+headers);
+        try {
+            CloseableHttpClient closeableHttpClient = getCloseableHttpClient();
+            RequestConfig requestConfig = getRequestConfig();
+            //1 创建 post 请求
+            HttpPost post = new HttpPost(url);
+            //2 设置请求默认配置
+            post.setConfig(requestConfig);
+            //3 设置请求头 post.setHeader("Content-type", "application/json; charset=utf-8");
+            if (!CollectionUtil.isEmpty(headers)) {
+                headers.forEach(post::setHeader);
+            }
+            //4 设置请求体
+            post.addHeader("Content-Type", "application/json");
+            if (!CollectionUtil.isEmpty(params)) {
+                post.setEntity(new StringEntity(JsonUtil.beanToJson(params), "utf-8"));
+            }
+            //5 发送请求
+            CloseableHttpResponse response = closeableHttpClient.execute(post);
+            //6 处理返回结果,
+            //6-1 如果状态码为200,就是正常返回
+            int statusCode = response.getStatusLine().getStatusCode();
+            if (statusCode == 200) {
+                return EntityUtils.toString(response.getEntity());
+            } else {
+                throw new RuntimeException("请求错误:" + statusCode);
+            }
+        } catch (IOException e) {
+            throw new RuntimeException(e);
         }
     }
 

+ 1 - 1
api-common/src/main/java/api/common/util/JsonUtil.java

@@ -39,7 +39,7 @@ public class JsonUtil {
                     jsonNode = jsonNode.path(element);
                 }
             }
-            //此处需使用toString,asText只能在最后一级使用,否则值为null
+            //此处需使用toString,asText只能在最后一级使用,否则值为null,同时需要注意去掉双引号
             return jsonNode.toString();
         } catch (JsonProcessingException e) {
             throw new RuntimeException(e);

+ 59 - 0
simulation-oauth-client/src/main/java/com/css/simulation/oauth/client/controller/SignController.java

@@ -318,6 +318,65 @@ public class SignController {
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, simulationTokenVO);
     }
 
+
+    /**
+     * 用户名密码登录
+     *
+     * @return token 信息
+     */
+    @RequestMapping("/username_for_scheduler")
+    @SneakyThrows
+    @ResponseBody
+    public ResponseBodyVO<SimulationTokenVO> usernameForScheduler(@RequestBody @Validated SignUsernameParameter signSingleParameter) {
+        log.info("登录参数为:" + signSingleParameter);
+        String username = signSingleParameter.getUsername();
+        String password = signSingleParameter.getPassword();
+        //密码加密
+        password = EncryptUtil.getLowerMD5(password);
+        UserVO userVO = userMapper.selectByUsername(username);
+
+        //登录逻辑判断
+        if (userVO == null) {
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "用户名或密码错误。");
+        } else if (!username.equals(userVO.getUsername()) && username.equalsIgnoreCase(userVO.getUsername())) {
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "用户名大小写格式有问题。");
+        } else if (!"1".equals(userVO.getVisible())) {
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "账户已停用。");
+        }
+        //根据登录日志判断是否锁定账户
+        List<LogLoginPO> log = logLoginMapper.selectLogByUserId(userVO.getId(), oauthParameter.getSimulationLoginRepeatHours(), oauthParameter.getSimulationLoginRepeatCount());
+        if (ObjectUtil.isNotNull(log) && log.size() >= oauthParameter.getSimulationLoginRepeatCount()) {
+            int sum = log.stream().mapToInt(m -> m.getState()).sum();
+            if (sum <= 0) {
+                return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "登录失败次数过多,账户被锁定,请" + oauthParameter.getSimulationLoginRepeatHours() + "小时后重新登录!");
+            }
+        }
+       /* //登录逻辑判断
+        if (userVO == null ) {
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "用户名或密码错误!");
+        }else if(!"1".equals(userVO.getVisible())){
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "账户已停用!");
+        }else if(!userVO.getPassword().equals(password)) {
+            //记录登录错误日志
+            po.setUserId(userVO.getId());
+            po.setUsername(userVO.getUsername());
+            po.setState(0);
+            logLoginMapper.insertLog(po);
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "用户名或密码错误!");
+        }*/
+        //3 根据仿真平台用户名密码颁发仿真平台 token,返回给前端
+        String simulationTokenUrl = oauthParameter.getSimulationTokenUri() +
+                "?grant_type=password" +
+                "&client_id=" + oauthParameter.getSimulationClientId() +
+                "&client_secret=" + oauthParameter.getSimulationClientSecret() +
+                "&username=" + username +
+                "&password=" + password;
+        String simulationToken = HttpUtil.get(closeableHttpClient, requestConfig, simulationTokenUrl);
+        SimulationTokenVO simulationTokenVO = JsonUtil.jsonToBean(simulationToken, SimulationTokenVO.class);
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, simulationTokenVO);
+    }
+
+
     /**
      * 令牌刷新
      *

+ 17 - 15
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/domain/service/ProjectDomainService.java

@@ -848,12 +848,12 @@ public class ProjectDomainService {
     @SneakyThrows
     public void selectProjectDetailsById(String projectType, String projectId) {
         String tokenUrl = customConfiguration.getTokenUri() + "?grant_type=client_credentials" + "&client_id=" + customConfiguration.getClientId() + "&client_secret=" + customConfiguration.getClientSecret();
-        log.debug("获取仿真云平台 token:" + tokenUrl);
+        log.info("获取仿真云平台 token:" + tokenUrl);
         String response = HttpUtil.get(tokenUrl);
         ObjectMapper objectMapper = new ObjectMapper();
         JsonNode jsonNode = objectMapper.readTree(response);
         String accessToken = jsonNode.path("access_token").asText();
-        log.debug("仿真云平台 token 为:" + accessToken);
+        log.info("仿真云平台 token 为:" + accessToken);
         Map<String, String> headers = new HashMap<>();
         headers.put("Authorization", "Bearer " + accessToken);
         Map<String, String> params = new HashMap<>();
@@ -877,20 +877,22 @@ public class ProjectDomainService {
     @SneakyThrows
     public void selectProjectReportById(String projectType, String projectId) {
 //        String tokenUrl = customConfiguration.getTokenUri() + "?grant_type=client_credentials" + "&client_id=" + customConfiguration.getClientId() + "&client_secret=" + customConfiguration.getClientSecret();
-        String tokenUrl = "http://10.14.85.241/simulation/oauth/client/sign/username?username=sysadmin&password=123456";
-        log.debug("获取仿真云平台 token:" + tokenUrl);
-        String response = HttpUtil.get(tokenUrl);
-        ObjectMapper objectMapper = new ObjectMapper();
-        JsonNode jsonNode = objectMapper.readTree(response);
-        String accessToken = jsonNode.path("access_token").asText();
-        log.debug("仿真云平台 token 为:" + accessToken);
+        String tokenUrl = "http://10.14.85.241/simulation/oauth/client/sign/username_for_scheduler";
+        Map<String, String> params1 = new HashMap<>();
+        params1.put("username", "sysadmin");
+        params1.put("password", "123456");
+        String response = HttpUtil.post(tokenUrl, null, params1);
+        log.info("获取仿真云平台 token:" + tokenUrl + ",结果为:" + response);
+        String accessTokenString = JsonUtil.getString(response, "info.access_token");
+        final String accessToken = accessTokenString.substring(1, accessTokenString.length() - 1);
+        log.info("仿真云平台 token 为:" + accessToken);
         Map<String, String> headers = new HashMap<>();
         headers.put("Authorization", "Bearer " + accessToken);
-        Map<String, String> params = new HashMap<>();
-        params.put("projectType", projectType);
-        params.put("id", projectId);
-        String result = HttpUtil.post(customConfiguration.getProjectReportUri(), headers, params);
-        log.info("访问仿真云平台项目报告接口:" + customConfiguration.getProjectReportUri() + ",请求头为:" + headers + ",请求体为:" + params + "结果为:" + result);
+        Map<String, String> params2 = new HashMap<>();
+        params2.put("projectType", projectType);
+        params2.put("id", projectId);
+        String result = HttpUtil.post(customConfiguration.getProjectReportUri(), headers, params2);
+        log.info("访问仿真云平台项目报告接口:" + customConfiguration.getProjectReportUri() + ",请求头为:" + headers + ",请求体为:" + params2 + "结果为:" + result);
         ResponseBodyVO<?> responseBodyVO = JsonUtil.jsonToBean(result, ResponseBodyVO.class);
         String projectReportVOJson = JsonUtil.beanToJson(responseBodyVO.getInfo());
         TimeUnit.SECONDS.sleep(3);
@@ -995,7 +997,7 @@ public class ProjectDomainService {
         } else {
             throw new RuntimeException("未知项目类型:" + projectType);
         }
-        if ( DictConstants.ALGORITHM_UPLOAD_MODE_PLATFORM.equals(algorithmType)) {
+        if (DictConstants.ALGORITHM_UPLOAD_MODE_PLATFORM.equals(algorithmType)) {
             return algorithmExpandMapper.selectDockerImageByAlgorithmId(algorithmId);
         } else {
             return algorithmMapper.selectDockerImageById(algorithmId);

+ 1 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/server/app/impl/SimulationProjectServiceImpl.java

@@ -297,6 +297,7 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
                 newProjectPO.setEvaluationLevel("");
                 newProjectPO.setStartTime(new Date());
                 newProjectPO.setFinishTime(null);
+                projectDetailsVO.setProjectId(newProjectPO.getProjectId());
                 String projectDetailsVOJson = JsonUtil.beanToJson(projectDetailsVO);
                 newProjectPO.setDetails(projectDetailsVOJson);
                 simulationManualProjectMapper.add(newProjectPO);

+ 0 - 2
simulation-resource-server/src/main/java/com/css/simulation/resource/server/infra/oauth/OAuth2Configuration.java

@@ -1,7 +1,5 @@
 package com.css.simulation.resource.server.infra.oauth;
 
-import com.css.simulation.resource.server.infra.oauth.MyUserAuthenticationConverter;
-import com.css.simulation.resource.server.infra.oauth.OauthParameter;
 import lombok.SneakyThrows;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.security.config.annotation.web.builders.HttpSecurity;