二者使用场景,以及怎么使用介绍一下
时间: 2023-07-11 12:16:08 浏览: 77
过滤器和拦截器都可以用于对请求进行处理,但是它们的使用场景和实现方式有所不同。
1. 过滤器
过滤器是Servlet技术中的一种基本组件,用于在请求到达Servlet之前或响应返回给客户端之前拦截请求或响应,对其进行处理或修改。过滤器可以用于字符编码的转换、请求参数的校验、统一的异常处理等场景。
使用过滤器的步骤:
- 实现javax.servlet.Filter接口,重写doFilter()方法;
- 在web.xml中配置过滤器的名称、类名和拦截的URL模式。
示例代码:
```java
public class EncodingFilter implements Filter {
private String encoding;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
encoding = filterConfig.getInitParameter("encoding");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
@Override
public void destroy() {}
}
```
在web.xml中配置过滤器:
```xml
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.example.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
```
2. 拦截器
拦截器是Spring框架中的一种组件,用于拦截请求并进行特定的处理,如登录校验、权限校验等。拦截器可以用于对请求进行统一的处理和拦截,对于复杂的业务场景,使用拦截器比较方便。
使用拦截器的步骤:
- 实现org.springframework.web.servlet.HandlerInterceptor接口,重写preHandle()、postHandle()和afterCompletion()方法;
- 在配置文件中配置拦截器并指定拦截的URL模式。
示例代码:
```java
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String token = request.getHeader("token");
if (StringUtils.isEmpty(token)) {
response.setStatus(HttpStatus.UNAUTHORIZED.value());
return false;
}
// 校验token是否有效
boolean isValid = checkToken(token);
if (!isValid) {
response.setStatus(HttpStatus.UNAUTHORIZED.value());
return false;
}
return true;
}
// 省略postHandle()和afterCompletion()方法
}
```
在配置文件中配置拦截器:
```xml
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.example.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
```
总的来说,过滤器和拦截器都是对请求进行处理的重要组件,使用时需要根据具体的业务场景进行选择和配置。
阅读全文