在我的应用程序中,我使用Web服务来获取所需信息。要实际使用此服务,您必须先登录,然后获取令牌加密密码,然后将此令牌附加到SOAP请求以识别当前用户。问题是,当您不使用服务15分钟时,您的令牌会更改,当您尝试从服务器获取另一组信息时,它会拒绝旧令牌。因此,应用程序无法获取所需信息并引发一堆错误。
如何在更改令牌后将用户(加载Login.axm)发送到登录页面?
答案 0 :(得分:1)
谢谢Shay Shmeltzer的回答。
我是如何解决这个问题的:
1)首先,我读了会话在我的特定情况下是如何工作的。我使用了无状态会话,这意味着 -
为初始请求打开一个新会话,会话保持不变 对后续请求开放。 Relogin自动发生 (如果会话已关闭,则对用户透明)。 UsernameToken和 PasswordText必须作为SOAP标头包含在初始请求中 打开无国籍会议。
无状态会话管理是用于高负载的最佳方法 Web服务应用程序。使用无状态模式,应用程序 仅提供一次用户名和密码,即初始用户名和密码 请求。会话在服务器上打开,专用于此 用户。
在响应中Siebel Business Applications返回SessionToken, 这是一个包含有关信息的加密字符串 用户名,密码和时间戳。对于后续请求 应用程序必须使用SessionToken重用会话。
出于安全原因,会为每个响应重新生成SessionTokens。 应用程序必须提供最后收到的SessionToken 下一个请求。
SessionToken-Siebel会话映射在Siebel Web中维护 服务器扩展(SWSE);基于SWSE发送的SessionToken值 请求正确的Siebel会话(任务)。
虽然会话是持久的,但每个会话都会进行身份验证 请求(SWSE解密用户名和密码 SessionToken)。
主要问题是:
注意:只有在重新连接或自动登录时才会发生 令牌没有超时。如果超时,则用户必须 手动重新登录。令牌超时必须大于或等于 会话超时。有关会话令牌超时的详细信息,请参阅 会话和会话令牌超时相关参数。
在我的情况下,标准会话令牌的实时时间是15分钟。
这就是我在我的代码中包含计数器并在每次请求之前检查它的原因。如果计数器时间> 15分钟,我向服务器发送登录请求以获取新的会话令牌。原因是,我没有在计数器超过15分钟后立即将当前页面更改为登录页面:代码中的位置,我检查计数器已经由绑定启动以获取所需的值来呈现它,所以如果你的令牌有过期你会得到一堆错误。这就是为什么我首先更新会话发送登录请求,获取活动会话令牌并将其放入绑定请求的最后一个请求。在应用程序呈现页面后没有任何错误,它会显示弹出消息“会话已过期”并转到登录页面。
答案 1 :(得分:0)
您可以通过编程方式设置从ADF Mobile发送到SOAP服务的soap标头 - http://docs.oracle.com/cd/E37975_01/doc.111240/e24475/amxwebservices.htm#CHDIBIIE