java-dubbox拦截器配置

本文介绍了如何在Dubbo(Dubbox)框架中实现拦截器功能,以限制访问权限。通过创建自定义的`TokenInterceptor`实现Filter接口,并在配置文件中指定,使得能够对dubbo接口进行权限控制。详细步骤包括拓展Filter、编写拦截器实现类以及在配置文件中添加过滤器配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

dubbo是一个被国内很多互联网公司广泛使用的开源分布式服务框架,即使从国际视野来看应该也是一个非常全面的SOA基础框架。作为一个重要的技术研究课题,在当当网我们根据自身的需求,为Dubbo实现了一些新的功能,并将其命名为Dubbox(即Dubbo eXtensions)

dubbox支持REST风格远程调用(HTTP + JSON/XML)

支持基于Kryo和FST的Java高效序列化实现

支持基于嵌入式Tomcat的HTTP remoting体系

升级Spring

升级ZooKeeper客户端

可以参考:https://www.oschina.net/p/dubbox

在开发中,有时候需要限制访问的权限,白名单就是一种方法。对于Java Web应用,Spring的拦截器可以拦截Web接口的调用;而对于dubbo接口,Spring的拦截器就不管用了。

dubbo提供了Filter扩展,可以通过自定义Filter来实现这个功能。

1、拓展Filter

public class TokenInterceptor implements Filter{
private LoginApi loginApi = new LoginApiImpl();
private String tokenErrorUrl=“http://127.0.0.1:5033/token/tokenError”;

@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
	HttpServletRequest request = (HttpServletRequest)RpcContext.getContext().getRequest();
	HttpServletResponse response = (HttpServletResponse)RpcContext.getContext().getResponse();
	String token = request.getParameter("token");
	boolean flag = loginApi.validToken(token);
	if (flag) {
		return invoker.invoke(invocation);
	}else {
		AppDomain app=new AppDomain();
		app.setMessage("900"); 
		app.setData(null);
		print(JsonUtil.toJson(app),response);
		return new RpcResult();
	}
}
protected void print(String str,HttpServletResponse response) {
	PrintWriter writer = null;
	try {
		response.setContentType("text/html; charset=utf-8" );
		writer = response.getWriter();
		writer.print(str);
	} catch (Exception e) {
		
	} finally {
		CloseUtil.close(writer);
	}
}
public LoginApi getLoginApi() {
	return loginApi;
}
public void setLoginApi(LoginApi loginApi) {
	this.loginApi = loginApi;
}
public String getTokenErrorUrl() {
	return tokenErrorUrl;
}
public void setTokenErrorUrl(String tokenErrorUrl) {
	this.tokenErrorUrl = tokenErrorUrl;
}

}
2、配置文件

在resources目录下添加纯文本文件META-INF/dubbo/com.alibaba.dubbo.rpc.Filter

在这里插入图片描述
内容

loginInterceptor=com.XXX.dubbo.web.Interceptor.LoginInterceptor
然后在配置接口是将此拦截器配置上

<dubbo:protocol id=“xxxRest” name=“rest” port=“2000”/>

<dubbo:service interface=“com.xxx.api.person.PersonApi”
ref=“xxxApi” version=“1.0” group=“xxx-person”
protocol=“personRest” filter=“loginInterceptor” timeout=“60000” />

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

活力好心情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值