配置过滤器

本文介绍了一个名为SJFilter的自定义过滤器实现,该过滤器主要用于处理特定URL请求,并通过拦截来实现请求路径的判断与特定操作。文章详细展示了如何通过Java Servlet API实现过滤器的功能。
过滤器类

import java.io.IOException;
import java.io.Writer;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.http.MediaType;
import com.alibaba.fastjson.JSON;
public class SJFilter implements Filter {
private final Log logger = LogFactory.getLog(this.getClass());
private static Map<String, SjjlInterceptionobject> allowUriMap = new HashMap<String, SjjlInterceptionobject>();
public SJFilter() {
}

public void destroy() {
}

// 正式内容从这里开始(需要做什么写什么,这里是顺便记录一下获取路径的方法)
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
 request.setCharacterEncoding("utf-8");
// 首先获取请求路径
HttpServletRequest request2 = (HttpServletRequest) request;
String uri = request2.getRequestURI();
……
// do Something后 allowUriMap里面是需要拦截的路径
//判断该请求是否是拦截对象
if (allowUriMap.containsKey(uri)) {
//是的话do Something
……
}
//执行该方法,回归到该执行的请求
chain.doFilter(request, response);
}

@Override
public void init(FilterConfig arg0) throws ServletException {

}
}


xml文件中的配置

   <filter>
<filter-name>SJFilter</filter-name>
<filter-class>com.test.SJFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SJFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
### 如何在 Dubbo 中配置过滤器 #### 配置文件方式 在 `dubbo.properties` 或者 Spring XML 文件中可以方便地配置过滤器。对于全局生效的过滤器,可以直接在配置文件里指定: ```properties # 使用逗号分隔多个过滤器名称 dubbo.provider.filter=dubboExceptionFilter,accessLogFilter ``` 如果希望仅针对特定的服务应用过滤器,则可以在服务接口上声明: ```xml <dubbo:service interface="com.example.DemoService" ref="demoServiceImpl"> <dubbo:method name="sayHello" filter="contextFilter"/> </dubbo:service> ``` 上述例子展示了如何为名为 `DemoService` 的服务设置方法级别的过滤器[^5]。 #### 编码实现自定义过滤器 创建一个新的 Java 类继承于 `org.apache.dubbo.rpc.Filter` 接口并重写相应的方法来处理请求前后的逻辑操作。下面是一个简单的异常捕获过滤器实例: ```java @Activate(group = {Constants.PROVIDER}) public class CustomExceptionFilter implements Filter { @Override public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException { try { // 调用下一个过滤器或目标服务 return invoker.invoke(invocation); } catch (Throwable t) { // 处理抛出的异常 System.err.println("Caught exception during service call."); throw new RpcException(t.getMessage()); } } } ``` 此代码片段展示了一个基于注解的方式激活的服务端过滤器,在发生错误时打印堆栈跟踪信息并将异常封装成RpcException返回给客户端[^4]。 #### 动态加载外部JAR包中的过滤器 当项目依赖第三方库提供的过滤器组件时,可以通过将这些jar放置到classpath下,并按照SPI机制的要求编写相应的元数据文件(通常位于META-INF/dubbo/internal/目录内),从而让Dubbo自动发现并注册它们作为可用的选择之一[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值