/** * @author: zhuocc2 * @date: 2019-08-07 10:10:20 AM * @ClassName: ServiceAuthorization.java * @Description: TODO service authorization */ @Activate(group = Constants.PROVIDER) public class ServiceAuthorization implements Filter { private Logger log = Logger.getLogger(ServiceAuthorization.class); @Override public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException { // 如果通过,提供服务 String sid = invocation.getAttachment("sid"); if (!StringUtils.isNullOrEmpty(sid)) { Properties properties = new Properties(); InputStream inStream = ServiceAuthorization.class.getClassLoader().getResourceAsStream("config.properties"); try { properties.load(inStream); String serviceId = properties.getProperty("sid"); if (sid.equals(serviceId)) { return invoker.invoke(invocation); } else { log.info("request service fail! no authorization!"); } } catch (IOException e) { e.printStackTrace(); } } else { log.info("sid为空"); } // 不通过,拒绝服务 return null; } }
# service id sid=U2FsdGVkX19mOiO9RA2MAJX9qgLFJZC49q3efV5MY43w=
<dubbo:provider filter="ServiceAuthorization"/>
-conf -META-INF -dubbo com.alibaba.dubbo.rpc.Filter com.alibaba.dubbo.rpc.Filter内容如下 ServiceAuthorization=service.impl.ServiceAuthorization
/** * @author: zhuocc2 * @date: 2019-08-07 10:47:12 AM * @ClassName: RPCAuthorization.java * @Description: TODO RPC Service Authorization */ @Activate(group = Constants.CONSUMER) public class RPCAuthorization implements Filter { private Logger log = Logger.getLogger(RPCAuthorization.class); // service id private String sid; @Override public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException { Properties properties = new Properties(); InputStream iStream = RPCAuthorization.class.getClassLoader().getResourceAsStream("config/config.properties"); try { properties.load(iStream); sid = (String) properties.get("sid"); RpcContext.getContext().setAttachment("sid", sid); return invoker.invoke(invocation); } catch (IOException e) { e.printStackTrace(); } return null; } }
# service id sid=U2FsdGVkX19mOiO9RA2MAJX9qgLFJZC49q3efV5MY43w= 注意,这里的sid必须与服务端sid一致,才能完成服务调用
-META-INF -dubbo com.alibaba.dubbo.rpc.Filter com.alibaba.dubbo.rpc.Filter内容如下 RPCAuthorization=web.utils.RPCAuthorization 调用方无需在Spring配制文件里配制Filter。 |
|