1.一般登录的时候可能要保存的值,用ThreadLocal保存
package com.banksteel.openerp.commons.filter;
public class SaasParameter {
// 创建线程局部变量,并初始化值
private static ThreadLocal<String> memberIdThreadLocal = new ThreadLocal<String>() {
protected String initialValue() {
return "";
};
};
// 提供线程局部变量set方法
public static void setMemberId(String memberId) {
memberIdThreadLocal.set(memberId);
}
// 提供线程局部变量get方法
public static String getMemberId() {
return memberIdThreadLocal.get();
}
}
2,要保存的值
SaasParameter.setMemberId(“xxxx”);
3.web层的comsumer
dubbo-comsumer.xml 配置监听
<dubbo:consumer filter="${dubbo.consumer.filter}" timeout="${dubbo.consumer.timeout}" check="false" />
4.监听的java类。把SaasParameter里面的值给dubbo
package com.banksteel.openerp.commons.filter;
import com.alibaba.dubbo.rpc.Filter;
import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Result;
import com.alibaba.dubbo.rpc.RpcException;
public class SaasConsumerFilter implements Filter {
@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
//把SassParameter里面的值放到dubbo监听的invoke里面
invocation.getAttachments().put("memberId", SaasParameter.getMemberId());
Result result = invoker.invoke(invocation);
return result;
}
}
5.service的provider提供方
dubbo-provider.xml 配置监听
<dubbo:provider filter="${dubbo.provider.filter}"
timeout="${dubbo.provider.timeout}" />
6.监听的java类,把dubbo里面的值再给SaasParameter
package com.banksteel.openerp.commons.filter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.dubbo.rpc.Filter;
import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Result;
import com.alibaba.dubbo.rpc.RpcException;
import com.alibaba.dubbo.rpc.RpcResult;
import cn.mysteel.util.StringUtils;
public class SaasProviderFilter implements Filter {
private Logger logger = LoggerFactory.getLogger(SaasProviderFilter.class);
@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
String memberId = invocation.getAttachments().get("memberId");
SaasParameter.setMemberId(memberId);
return invoker.invoke(invocation);
}
}
7,service层调用SaasParameter的值
SaasParameter.getMemberId()