目录
一、概念
1.1 javax.servlet.Filter
Java Servlet 规范的一部分,用于对请求和响应进行预处理和后处理。它在整个 web 应用的生命周期内工作,主要用于以下目的:
- 认证和授权:在请求到达 Servlet 之前检查用户身份和权限。
- 日志记录:记录请求和响应的信息。
- 数据压缩:对响应数据进行压缩。
- 内容过滤:对请求和响应的内容进行修改
1.2 AccessControlFilter
Apache Shiro 框架的一部分,是专门为访问控制设计的过滤器。它继承自 Shiro 的 PathMatchingFilter
,用于在访问某个 URL 之前进行权限检查。它主要用于以下目的:
- 访问控制:检查当前用户是否有权访问请求的资源。
- 身份验证:在访问资源之前检查用户是否已登录。
- 权限检查:在访问资源之前检查用户是否具有所需的权限。
二、区别
2.1框架方面
javax.servlet.Filter
属于 Java Servlet 规范,是 Java EE 技术的一部分。
AccessControlFilter
属于 Apache Shiro 框架,是专门用于安全和访问控制。
2.2用途方面
javax.servlet.Filter
通常用于各种通用的预处理和后处理任务,如认证、日志记录、数据压缩等。
AccessControlFilter
专门用于访问控制和安全检查。
2.3集成方面
javax.servlet.Filter
通常配置在 web.xml
中或通过 Java 配置类进行配置。
AccessControlFilter
在 Shiro 配置文件或 Spring 配置类中进行配置,通常与 Shiro 的安全管理器集成。
三、使用场景
3.1 javax.servlet.Filter
使用 javax.servlet.Filter
进行通用的请求和响应处理,比如压缩、日志记录、认证等。
public class MyServletFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 初始化操作
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 预处理操作
chain.doFilter(request, response);
// 后处理操作
}
@Override
public void destroy() {
// 销毁操作
}
}
3.2AccessControlFilter
使用 AccessControlFilter
进行更高级的安全控制和权限管理,特别是在使用 Shiro 框架的应用中。
public class MyAccessControlFilter extends AccessControlFilter {
@Override
protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue)
throws Exception {
// 检查用户是否有权访问
return true; // 这里根据实际情况进行判断
}
@Override
protected boolean onAccessDenied(ServletRequest request, ServletResponse response)
throws Exception {
// 当访问被拒绝时的处理
response.getWriter().write("Access Denied");
return false;
}
}
四、总结
这两个过滤器在使用范围和目的上有明显的区别,根据具体需求选择合适的过滤器进行实现。