详解JavaWeb过滤器 Filter

简介: 1.过滤器概述过滤器,顾名思义就是对事物进行过滤的,在Web中的过滤器,当然就是对请求进行过滤,我们使用过滤器,就可以对请求进行拦截,然后做相应的处理,实现许多特殊功能。如登录控制,权限管理,过滤敏感词汇等要在Javaweb项目中使用过滤器,实现Java - Servlet - Filter接口即可:以下是一个模板,需要实现三个方法:


1.过滤器概述


过滤器,顾名思义就是对事物进行过滤的,在Web中的过滤器,当然就是对请求进行过滤,我们使用过滤器,就可以对请求进行拦截,然后做相应的处理,实现许多特殊功能。如登录控制,权限管理,过滤敏感词汇等

要在Javaweb项目中使用过滤器,实现Java - Servlet - Filter接口即可:

以下是一个模板,需要实现三个方法:


import javax.servlet.*;
import java.io.IOException;
public class CharacterEncodingFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    }
    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}


2.使用过滤器解决中文编码异常问题


Javaweb默认网页内输出中文会发生乱码,我们可以通过如下两行来设置请求和响应编码,以解决这个问题:


servletResponse.setContentType("text/html;charset=utf-8");


但是当存在多个Servlet时势必会发生不便(产生大量冗余代码),此时可以通过过滤器解决:

重写doFilter方法:


@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    servletResponse.setContentType("text/html;charset=utf-8");
    // 必须要让过滤器继续通行
    filterChain.doFilter(servletRequest, servletResponse);
}


同时,在web.xml文件中也要进行配置:


<filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <!-- 过滤整个网站的请求 -->
    <url-pattern>/*</url-pattern>
</filter-mapping>


如上即可解决乱码问题🧨


3.使用过滤器实现用户登录权限拦截


如下的doFilter过滤判断,如果用户的登录SESSION为null,则跳转登录页面:


@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    // 强转为HttpServletRequest格式
    HttpServletRequest request = (HttpServletRequest) servletRequest;
    HttpServletResponse response = (HttpServletResponse) servletResponse;
    if (request.getSession().getAttribute("USER_LOGIN_SESSION") == null) {
        response.sendRedirect("/login.jsp");
    }
    filterChain.doFilter(request, response);
}
目录
相关文章
|
22天前
|
Web App开发 SQL Java
javaweb实现分页(二)
javaweb实现分页(二)
17 1
|
22天前
|
SQL 关系型数据库 MySQL
javaweb实现分页查询(一)
javaweb实现分页查询(一)
17 0
|
22天前
|
SQL 关系型数据库 MySQL
javaweb中实现分页,持续更新……
javaweb中实现分页,持续更新……
15 1
|
28天前
|
Java Spring 容器
[JavaWeb]——过滤器filter与拦截器Interceptor的使用、执行过程、区别
[JavaWeb]——过滤器filter与拦截器Interceptor的使用、执行过程、区别
|
1月前
JavaWeb 开发之 ServletContext 的和使用
JavaWeb 开发之 ServletContext 的和使用
18 1
|
15天前
|
SQL 前端开发 Java
Java后端进阶之路: JavaWeb(四)
Java后端进阶之路: JavaWeb
31 1
|
XML SQL Java
Java后端进阶之路: JavaWeb(三)
Java后端进阶之路: JavaWeb
28 1
|
2月前
|
设计模式 XML 前端开发
JavaWeb 会话_过滤_监听器
JavaWeb 会话_过滤_监听器
26 0
|
Java 缓存 应用服务中间件
Java EE 之 过滤器入门学习与总结(2)
今天就对使用Filter技术能做什么来个小小的归纳。也为了方便今后的复习。 控制浏览器不进行对jsp页面的缓存 //在doFilter方法中添加这样的代码 HttpServletRequest request = (HttpServletRequest )req; Ht...
977 0
|
3天前
|
存储 Java 数据库连接
java多线程之线程通信
java多线程之线程通信