From af126119293d06f991fa63bd119f7e4c1c29fec2 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Thu, 19 Sep 2024 18:36:47 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-135114=20=E3=80=90fr-fbp=E5=9B=9E?= =?UTF-8?q?=E5=BD=92=E3=80=91=E8=BF=9C=E7=A8=8B=E8=AE=BE=E8=AE=A1=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E4=BB=A3=E7=A0=81=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/backup/EnvBackupHelper.java | 2 +- .../fr/design/env/HttpWorkspaceConnector.java | 41 ++++++------------- .../com/fr/design/env/RemoteWorkspace.java | 3 +- 3 files changed, 16 insertions(+), 30 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/backup/EnvBackupHelper.java b/designer-base/src/main/java/com/fr/design/backup/EnvBackupHelper.java index 73d0cbc1b1..1dddbc2493 100644 --- a/designer-base/src/main/java/com/fr/design/backup/EnvBackupHelper.java +++ b/designer-base/src/main/java/com/fr/design/backup/EnvBackupHelper.java @@ -131,7 +131,7 @@ public class EnvBackupHelper { */ public void rollbackEnv() { if (origin instanceof RemoteWorkspace && ((RemoteWorkspace) origin).getClient() instanceof FineWorkspaceHttpClient) { - ((FineWorkspaceHttpClient) ((RemoteWorkspace) origin).getClient()).startHeartBeat(); + ((FineWorkspaceHttpClient) ((RemoteWorkspace) origin).getClient()).connect(); } } diff --git a/designer-base/src/main/java/com/fr/design/env/HttpWorkspaceConnector.java b/designer-base/src/main/java/com/fr/design/env/HttpWorkspaceConnector.java index ce2cdab889..e1c2c5513e 100644 --- a/designer-base/src/main/java/com/fr/design/env/HttpWorkspaceConnector.java +++ b/designer-base/src/main/java/com/fr/design/env/HttpWorkspaceConnector.java @@ -4,6 +4,7 @@ import com.fanruan.workplace.http.HttpConstants; import com.fanruan.workplace.http.HttpServiceMap; import com.fanruan.workplace.http.RepositoryManager; import com.fanruan.workplace.http.info.Stub; +import com.fanruan.workplace.network.RemoteNetworkRepository; import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; import com.fr.workspace.engine.exception.RemoteDesignConnectionException; @@ -43,33 +44,20 @@ public class HttpWorkspaceConnector implements WorkspaceConnector { @Override public boolean testConnection(WorkspaceConnectionInfo connectionInfo) throws Exception { FineWorkspaceHttpClient client = FineWorkspaceHttpClient.create("Http-Client", connectionInfo); - LoginResponseInfoBean bean; try { - bean = RemoteAuthorityRepository.getInstance().login(createLoginBean(connectionInfo)); - checkValidAndUpdateInfo(client, connectionInfo, bean); + return testConnect(client, connectionInfo); } finally { client.closePool(); } - - return StringUtils.isNotEmpty(bean.getAccessToken()); } @Override public WorkspaceClient connect(WorkspaceConnectionInfo connectionInfo) throws Exception { FineWorkspaceHttpClient client = FineWorkspaceHttpClient.create("Http-Client", connectionInfo); try { - for (Map.Entry> entry : HttpServiceMap.getInstance().entrySet()) { - Stub stub = entry.getValue(); - stub.clearProxy(); - } - LoginResponseInfoBean bean = RemoteAuthorityRepository.getInstance().login(createLoginBean(connectionInfo)); - // 服务器如果没返回token,肯定是出问题了,直接抛出异常 - if (StringUtils.isEmpty(bean.getAccessToken())) { - throw new RuntimeException("Empty token, try connect again and check server"); + if (testConnect(client, connectionInfo)) { + client.connect(); } - FineLoggerFactory.getLogger().info("[connector] infos:{}", bean.getAccessToken()); - checkValidAndUpdateInfo(client, connectionInfo, bean); - client.startHeartBeat(); } catch (Exception e) { client.closePool(); throw e; @@ -79,28 +67,25 @@ public class HttpWorkspaceConnector implements WorkspaceConnector { return client; } - private void checkValidAndUpdateInfo(FineWorkspaceHttpClient client, WorkspaceConnectionInfo connectionInfo, LoginResponseInfoBean bean) throws Exception { + private boolean testConnect(FineWorkspaceHttpClient client, WorkspaceConnectionInfo connectionInfo) throws Exception { + for (Map.Entry> entry : HttpServiceMap.getInstance().entrySet()) { + Stub stub = entry.getValue(); + stub.clearProxy(); + } + LoginResponseInfoBean bean = RemoteAuthorityRepository.getInstance().login(createLoginBean(connectionInfo)); WorkspaceConnection connection = new WorkspaceConnection( UUID.randomUUID().toString(), connectionInfo.getUserName(), HttpConstants.AUTHORIZATION_PREFIX + bean.getAccessToken(), InetAddress.getLocalHost().getHostAddress()); client.updateConnection(connection); - // 检查远程权限 - if (!checkRemoteAuthority(connection)) { - // 无权限则抛出无权限的错 - throw new RemoteDesignNoAuthException(); - } - } - - private boolean checkRemoteAuthority(WorkspaceConnection connection) { try { - return RemoteAuthorityRepository.getInstance().isRoot(connection.getUserName()) || RemoteAuthorityRepository.getInstance().hasAuthority(connection.getUserName()); + return RemoteNetworkRepository.getInstance().testConnect(); + } catch (RemoteDesignNoAuthException e) { + throw e; } catch (Exception e) { - // 如果这里出现异常,就认为fr服务没启动 throw new RemoteDesignConnectionException(e, StringUtils.EMPTY); } - } private LoginRequestInfoBean createLoginBean(WorkspaceConnectionInfo connectionInfo) { diff --git a/designer-base/src/main/java/com/fr/design/env/RemoteWorkspace.java b/designer-base/src/main/java/com/fr/design/env/RemoteWorkspace.java index ca070219e5..177ff86931 100644 --- a/designer-base/src/main/java/com/fr/design/env/RemoteWorkspace.java +++ b/designer-base/src/main/java/com/fr/design/env/RemoteWorkspace.java @@ -13,6 +13,7 @@ import com.fr.workspace.connect.WorkspaceConnection; import com.fr.workspace.connect.WorkspaceConnectionInfo; import com.fr.workspace.server.authority.decision.DecisionOperator; import com.fr.workspace.pool.WorkObjectPool; +import com.fr.workspace.server.repository.WorkplaceConstants; import com.fr.workspace.server.repository.authority.RemoteAuthorityRepository; import javax.swing.SwingWorker; @@ -80,7 +81,7 @@ public class RemoteWorkspace implements Workspace { if (isRoot == null) { synchronized (this) { if (isRoot == null) { - isRoot = RemoteAuthorityRepository.getInstance().isRoot(getConnection().getUserName()); + isRoot = WorkplaceConstants.isRoot(); } } }