Browse Source

REPORT-135114 【fr-fbp回归】远程设计登录代码重构

fbp/merge
Destiny.Lin 5 months ago
parent
commit
af12611929
  1. 2
      designer-base/src/main/java/com/fr/design/backup/EnvBackupHelper.java
  2. 41
      designer-base/src/main/java/com/fr/design/env/HttpWorkspaceConnector.java
  3. 3
      designer-base/src/main/java/com/fr/design/env/RemoteWorkspace.java

2
designer-base/src/main/java/com/fr/design/backup/EnvBackupHelper.java

@ -131,7 +131,7 @@ public class EnvBackupHelper {
*/ */
public void rollbackEnv() { public void rollbackEnv() {
if (origin instanceof RemoteWorkspace && ((RemoteWorkspace) origin).getClient() instanceof FineWorkspaceHttpClient) { if (origin instanceof RemoteWorkspace && ((RemoteWorkspace) origin).getClient() instanceof FineWorkspaceHttpClient) {
((FineWorkspaceHttpClient) ((RemoteWorkspace) origin).getClient()).startHeartBeat(); ((FineWorkspaceHttpClient) ((RemoteWorkspace) origin).getClient()).connect();
} }
} }

41
designer-base/src/main/java/com/fr/design/env/HttpWorkspaceConnector.java vendored

@ -4,6 +4,7 @@ import com.fanruan.workplace.http.HttpConstants;
import com.fanruan.workplace.http.HttpServiceMap; import com.fanruan.workplace.http.HttpServiceMap;
import com.fanruan.workplace.http.RepositoryManager; import com.fanruan.workplace.http.RepositoryManager;
import com.fanruan.workplace.http.info.Stub; import com.fanruan.workplace.http.info.Stub;
import com.fanruan.workplace.network.RemoteNetworkRepository;
import com.fr.log.FineLoggerFactory; import com.fr.log.FineLoggerFactory;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import com.fr.workspace.engine.exception.RemoteDesignConnectionException; import com.fr.workspace.engine.exception.RemoteDesignConnectionException;
@ -43,33 +44,20 @@ public class HttpWorkspaceConnector implements WorkspaceConnector {
@Override @Override
public boolean testConnection(WorkspaceConnectionInfo connectionInfo) throws Exception { public boolean testConnection(WorkspaceConnectionInfo connectionInfo) throws Exception {
FineWorkspaceHttpClient client = FineWorkspaceHttpClient.create("Http-Client", connectionInfo); FineWorkspaceHttpClient client = FineWorkspaceHttpClient.create("Http-Client", connectionInfo);
LoginResponseInfoBean bean;
try { try {
bean = RemoteAuthorityRepository.getInstance().login(createLoginBean(connectionInfo)); return testConnect(client, connectionInfo);
checkValidAndUpdateInfo(client, connectionInfo, bean);
} finally { } finally {
client.closePool(); client.closePool();
} }
return StringUtils.isNotEmpty(bean.getAccessToken());
} }
@Override @Override
public WorkspaceClient connect(WorkspaceConnectionInfo connectionInfo) throws Exception { public WorkspaceClient connect(WorkspaceConnectionInfo connectionInfo) throws Exception {
FineWorkspaceHttpClient client = FineWorkspaceHttpClient.create("Http-Client", connectionInfo); FineWorkspaceHttpClient client = FineWorkspaceHttpClient.create("Http-Client", connectionInfo);
try { try {
for (Map.Entry<Class, Stub<?>> entry : HttpServiceMap.getInstance().entrySet()) { if (testConnect(client, connectionInfo)) {
Stub<?> stub = entry.getValue(); client.connect();
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");
}
FineLoggerFactory.getLogger().info("[connector] infos:{}", bean.getAccessToken());
checkValidAndUpdateInfo(client, connectionInfo, bean);
client.startHeartBeat();
} catch (Exception e) { } catch (Exception e) {
client.closePool(); client.closePool();
throw e; throw e;
@ -79,28 +67,25 @@ public class HttpWorkspaceConnector implements WorkspaceConnector {
return client; 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<Class, Stub<?>> entry : HttpServiceMap.getInstance().entrySet()) {
Stub<?> stub = entry.getValue();
stub.clearProxy();
}
LoginResponseInfoBean bean = RemoteAuthorityRepository.getInstance().login(createLoginBean(connectionInfo));
WorkspaceConnection connection = new WorkspaceConnection( WorkspaceConnection connection = new WorkspaceConnection(
UUID.randomUUID().toString(), UUID.randomUUID().toString(),
connectionInfo.getUserName(), connectionInfo.getUserName(),
HttpConstants.AUTHORIZATION_PREFIX + bean.getAccessToken(), HttpConstants.AUTHORIZATION_PREFIX + bean.getAccessToken(),
InetAddress.getLocalHost().getHostAddress()); InetAddress.getLocalHost().getHostAddress());
client.updateConnection(connection); client.updateConnection(connection);
// 检查远程权限
if (!checkRemoteAuthority(connection)) {
// 无权限则抛出无权限的错
throw new RemoteDesignNoAuthException();
}
}
private boolean checkRemoteAuthority(WorkspaceConnection connection) {
try { try {
return RemoteAuthorityRepository.getInstance().isRoot(connection.getUserName()) || RemoteAuthorityRepository.getInstance().hasAuthority(connection.getUserName()); return RemoteNetworkRepository.getInstance().testConnect();
} catch (RemoteDesignNoAuthException e) {
throw e;
} catch (Exception e) { } catch (Exception e) {
// 如果这里出现异常,就认为fr服务没启动
throw new RemoteDesignConnectionException(e, StringUtils.EMPTY); throw new RemoteDesignConnectionException(e, StringUtils.EMPTY);
} }
} }
private LoginRequestInfoBean createLoginBean(WorkspaceConnectionInfo connectionInfo) { private LoginRequestInfoBean createLoginBean(WorkspaceConnectionInfo connectionInfo) {

3
designer-base/src/main/java/com/fr/design/env/RemoteWorkspace.java vendored

@ -13,6 +13,7 @@ import com.fr.workspace.connect.WorkspaceConnection;
import com.fr.workspace.connect.WorkspaceConnectionInfo; import com.fr.workspace.connect.WorkspaceConnectionInfo;
import com.fr.workspace.server.authority.decision.DecisionOperator; import com.fr.workspace.server.authority.decision.DecisionOperator;
import com.fr.workspace.pool.WorkObjectPool; import com.fr.workspace.pool.WorkObjectPool;
import com.fr.workspace.server.repository.WorkplaceConstants;
import com.fr.workspace.server.repository.authority.RemoteAuthorityRepository; import com.fr.workspace.server.repository.authority.RemoteAuthorityRepository;
import javax.swing.SwingWorker; import javax.swing.SwingWorker;
@ -80,7 +81,7 @@ public class RemoteWorkspace implements Workspace {
if (isRoot == null) { if (isRoot == null) {
synchronized (this) { synchronized (this) {
if (isRoot == null) { if (isRoot == null) {
isRoot = RemoteAuthorityRepository.getInstance().isRoot(getConnection().getUserName()); isRoot = WorkplaceConstants.isRoot();
} }
} }
} }

Loading…
Cancel
Save