springboot-dubbo之api服务接口鉴权
流程步骤1、配置文件在bootstrap.yml增加是否开启鉴权配置等操作# 鉴权magical:dubbo:auth:#是否开启Dubbo服务鉴权enabled: true2、服务鉴权配置@Data@RefreshScope@Component(DubboAuthProperties.BEAN_NAME)@ConfigurationProperties(DubboAuthProperties.P
·
流程步骤
1、配置文件
在bootstrap.yml增加是否开启鉴权配置等操作
# 鉴权
magical:
dubbo:
auth:
#是否开启Dubbo服务鉴权
enabled: true
2、服务鉴权配置
@Data
@RefreshScope
@Component(DubboAuthProperties.BEAN_NAME)
@ConfigurationProperties(DubboAuthProperties.PREFIX)
public class DubboAuthProperties implements Serializable {
public static final String PREFIX = "magical.dubbo.auth";
public static final String BEAN_NAME = "dubboAuthProperties";
private String token ;//dubbo服务token,防止非法服务访问消费者/提供者
private Boolean enabled = Boolean.FALSE;
}
3、服务鉴权过滤器
@Activate(group = {Constants.PROVIDER})
public class DubboProviderAuthFilter implements Filter {
ExtensionFactory objectFactory =
ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getAdaptiveExtension();
private final DubboAuthProperties dubboAuthProperties
= objectFactory.getExtension(DubboAuthProperties.class, DubboAuthProperties.BEAN_NAME);
@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
if (dubboAuthProperties.getEnabled()) {
// RpcContext.getContext().setAttachment("token","lss0555"); //隐式配置token
String token = RpcContext.getContext().getAttachment("token");
System.out.println("token:"+token);
//对dubbo服务进行鉴权
if (null != token && token.equals("lss0555")) {
return invoker.invoke(invocation);
} else {
System.out.println("[DUBBO] Provider 接口鉴权失败,无法提供服务!");
throw new RpcException(" [DUBBO] Provider 接口鉴权失败,无法提供服务!");
}
}else {
System.out.println(invocation.getInvoker().getInterface().getName());
return invoker.invoke(invocation);
}
}
}
4、过滤器配置
在resource文件夹下面增加目录META-INF.dubbo,增加文件 com.alibaba.dubbo.rpc.Filter,内容如下:
dubboAuthorityLogFilter=com.example.userprovider.filter.DubboProviderAuthFilter
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)