在MobileFirst 8 Java Adapter之间传递数据

时间:2017-05-20 05:41:02

标签: java ibm-mobilefirst mobilefirst-adapters

我们如何在MobileFirst 8 Java Adapter for Authenticated用户之间传递数据,我尝试使用

保存信息
public void putInUserSession(String key, String value, AdapterSecurityContext securityContext) {
        if (securityContext != null && securityContext.getAuthenticatedUser() != null) {
            Map<String, Object> hashMap = securityContext.getAuthenticatedUser().getAttributes();
            hashMap.put(key, value);
        }

    }

但hashMap.put抛出“Unmodifiable Map”异常

3 个答案:

答案 0 :(得分:0)

你可以在保存之前分享你如何设置你的属性。

以下是在UserLogin安全类的protected AuthenticatedUser createUser()函数中设置属性的方法之一:

private Map<String, Object> attributes = new HashMap<String, Object>();
 //Here put or save values in attributes   
 @Override
    protected AuthenticatedUser createUser() {
        return new AuthenticatedUser(userId, displayName, this.getName(),attributes);
    }

我的猜测hashMap.put抛出“Unmodifiable Map”异常的原因之一是因为你的hashMap属于Map<String, Object>类型而你正在保存类型为Map<String, String>的值,这是不可能的。 您需要将Map<String, Object>转换为Map<String, String>,然后保存。

答案 1 :(得分:0)

MFP 8.0会话无状态。 (即)您无法将数据存储到http会话中。您将需要使用其他机制来存储会话数据。请参阅此处的讨论How to access IBM MobileFirst 7.1 default attribute store in session independent mode

知识中心记录了这种情况和解决方案。对于7.1,这会影响会话独立模式。在8.0以后,会话独立模式是唯一受支持的模式,您可以这样做。

https://www.ibm.com/support/knowledgecenter/en/SSHS8R_7.1.0/com.ibm.worklight.dev.doc/devref/c_java_server_side_api.html#java_server_side_api__java_rest

在Java RESTful适配器中保存请求之间的应用状态

在早于V7.1.0的版本中,开发人员能够通过使用会话对象(即request.getSession())将应用状态存储在HTTP会话中。(参见WL.Server)。

如果您在从IBM MobileFirst Platform Foundation V7.1.0开始可用的与会话无关的模式下工作,则必须在会话外保留适配器的适用状态,例如,使用Cloudant®等数据库< / p>

样本也附在上面的链接中。

答案 2 :(得分:0)

由于MFP 8不允许从适配器在会话中写入数据,我们可以使用以下方法实现功能

  1. 创建一个Java适配器,让我们说“自定义会话”
  2. 创建HashMap类型&gt;
  3. 的类级别(静态)
  4. 父hashMap的键将是您的“访问令牌”
  5. 子hashMap将在键值对
  6. 中存储您要存储的数据
  7. 添加一个调度程序来清理父hashMap,用于已结束的会话
  8. 因此我们可以创建自己的自定义方法来实现这一目标