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()