广告
返回顶部
首页 > 资讯 > 后端开发 > Python >详解JavaWeb过滤器Filter问题解决
  • 798
分享到

详解JavaWeb过滤器Filter问题解决

javawebfilter过滤器javaweb过滤器 2022-11-13 19:11:26 798人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录基本概念1.过滤器概述2.使用过滤器解决中文编码异常问题3.使用过滤器实现用户登录权限拦截基本概念 1、 Filter 过滤器它是 javaweb 的三大组件之一。 三大组件分别

基本概念

1、 Filter 过滤器它是 javaweb 的三大组件之一。 三大组件分别是: Servlet 程序、 Listener 监听器、 Filter 过滤器
2、 Filter 过滤器它是 JavaEE 的规范。 也就是接口
3、 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);
}

到此这篇关于详解JavaWeb过滤器 Filter问题解决的文章就介绍到这了,更多相关javaweb filter过滤器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 详解JavaWeb过滤器Filter问题解决

本文链接: https://www.lsjlt.com/news/170446.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作