AccessControlFilter 和 javax.servlet.Filter 傻傻分不清楚??看过来吧。

 

目录

一、概念

1.1 javax.servlet.Filter

1.2 AccessControlFilter

 二、区别

2.1框架方面

2.2用途方面 

 2.3集成方面 

 三、使用场景 

3.1 javax.servlet.Filter

 3.2AccessControlFilter

四、总结


一、概念

1.1 javax.servlet.Filter

Java Servlet 规范的一部分,用于对请求和响应进行预处理和后处理。它在整个 web 应用的生命周期内工作,主要用于以下目的:

  1. 认证和授权:在请求到达 Servlet 之前检查用户身份和权限。
  2. 日志记录:记录请求和响应的信息。
  3. 数据压缩:对响应数据进行压缩。
  4. 内容过滤:对请求和响应的内容进行修改

1.2 AccessControlFilter

Apache Shiro 框架的一部分,是专门为访问控制设计的过滤器。它继承自 Shiro 的 PathMatchingFilter,用于在访问某个 URL 之前进行权限检查。它主要用于以下目的:

  1. 访问控制:检查当前用户是否有权访问请求的资源。
  2. 身份验证:在访问资源之前检查用户是否已登录。
  3. 权限检查:在访问资源之前检查用户是否具有所需的权限。

 二、区别

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;
    }
}

四、总结

这两个过滤器在使用范围和目的上有明显的区别,根据具体需求选择合适的过滤器进行实现。

你可能感兴趣的:(servlet)