Perforce Performce Server 2020在多次登录时出现问题
从2015年Performce server迁移到2019年时,我面临着来自P4、P4JAVA的Java API的并行登录问题 在2019服务器上,如果多个IServer对象(例如Perforce Performce Server 2020在多次登录时出现问题,perforce,p4java,Perforce,P4java,从2015年Performce server迁移到2019年时,我面临着来自P4、P4JAVA的Java API的并行登录问题 在2019服务器上,如果多个IServer对象(例如server1和server2)使用相同的用户ID连接到服务器,则注销server1(即server1.logout())将结束所有其他同时登录的IServer对象的会话 2015服务器不会出现这种情况,使用注销结束server1的登录不会导致server2出现同样的情况 这是2019服务器的预期工作方式吗?更改任何属
server1
和server2
)使用相同的用户ID连接到服务器,则注销server1(即server1.logout()
)将结束所有其他同时登录的IServer对象的会话
2015服务器不会出现这种情况,使用注销结束server1的登录不会导致server2出现同样的情况
这是2019服务器的预期工作方式吗?更改任何属性是否可以使2019身份验证恢复到与2015 server类似的工作状态?
我在下面附上了一段代码并输出以供进一步参考
public static void main(String args[]) throws P4JavaException, URISyntaxException {
IOptionsServer server1 = null, server2 =null;
server1 = connectServer(server1,"p4javassl://127.0.0.1:1666");
server2 = connectServer(server2,"p4javassl://127.0.0.1:1666");
System.out.println(server1.getLoginStatus());
System.out.println(server2.getLoginStatus());
server1.logout();
System.out.println(server1.getLoginStatus());
System.out.println(server2.getLoginStatus());
}
public static IOptionsServer connectServer(IOptionsServer server,String URL)
throws P4JavaException, URISyntaxException {
Properties defaultProps = new Properties();
defaultProps.put(RpcPropertyDefs.RPC_SOCKET_SO_TIMEOUT_NICK, "90000");
defaultProps.putAll(System.getProperties());
server = ServerFactory.getOptionsServer(URL, defaultProps);
TrustOptions trustOptions = new TrustOptions(true, false, true);
((IOptionsServer) server).addTrust(trustOptions);
server.connect();
server.setUserName("usr");
server.login("pass");
return server;
}
2019服务器的输出
用户超级票证在11小时59分钟后到期。用户超级票证
11小时59分钟后到期。Perforce密码(P4PASSWD)无效
或未设置
Perforce密码(P4PASSWD)无效或未设置
2015服务器的输出
用户超级票证在11小时59分钟后到期。用户超级票证
11小时59分钟后到期。Perforce密码(P4PASSWD)无效
或未设置
用户超级票证在11小时59分钟后到期
所有客户端票证都存储在票证文件(
P4TICKETS
)中,由用户名和服务器端口键入。通过运行p4 tickets
命令,您可以查看所有票据
当您执行
p4注销时
,当前用户/端口的票证将从本地票证文件中删除,要求您再次p4登录
,以从服务器获取新的副本。由于定期注销不会使服务器上的票证无效,因此只要保留票证副本,您就可以保持“登录”;您可以通过拥有多个票证文件来实现这一点,或者只需保存散列然后还原它(如果票证文件中没有票证,您也可以将票证散列作为P4PASSWD
传递)。所有客户端票证都存储在一个票证文件(P4TICKETS
)中,由用户名和服务器端口键入。通过运行p4 tickets
命令,您可以查看所有票据
当您执行p4注销时
,当前用户/端口的票证将从本地票证文件中删除,要求您再次p4登录
,以从服务器获取新的副本。由于定期注销不会使服务器上的票证无效,因此只要保留票证副本,您就可以保持“登录”;您可以通过拥有多个票证文件来实现这一点,或者只需保存散列然后还原它(如果票证文件中没有票证,您也可以将票证散列作为P4PASSWD
传递)。不同之处可能在于P4Java默认为注销-a
,而不是常规的注销?检查文档,看看是否有一个注销选项,可以在不使服务器端票证无效的情况下清除本地票证。@Samwise默认情况下,logout
发生在logout-a
上,我已经验证了这一点。这可以使用LoginOptions进行控制。这看起来更像是服务器2019中的身份验证的内部功能从2015Ah起发生了一些变化,可能不同之处在于现在它们共享相同的票证文件?P4Java是否允许您配置票证文件位置?我不知道票证文件如何用于登录/身份验证,但我认为这不是问题所在。我相信是这样的,因为我从另一台机器上登录和注销,而从另一台机器上注销也结束了我当前的会话machine@Samwise另外,如果有帮助,我已经将服务器的TLS安全设置为1.2。区别可能是P4Java默认为logout-a
,而不是常规的logout
?检查文档,看看是否有一个注销选项,可以在不使服务器端票证无效的情况下清除本地票证。@Samwise默认情况下,logout
发生在logout-a
上,我已经验证了这一点。这可以使用LoginOptions进行控制。这看起来更像是服务器2019中的身份验证的内部功能从2015Ah起发生了一些变化,可能不同之处在于现在它们共享相同的票证文件?P4Java是否允许您配置票证文件位置?我不知道票证文件如何用于登录/身份验证,但我认为这不是问题所在。我相信是这样的,因为我从另一台机器上登录和注销,而从另一台机器上注销也结束了我当前的会话machine@Samwise如果有帮助的话,我已经将服务器的TLS安全设置为1.2