47.JavaWeb过滤器、登录验证

过滤器web项目三大组件之一,工作在servlet之前。应用场景:统一设置字符编码集、敏感词汇的过滤、登录校验、权限验证等。生命周期:web服务器启动时,过滤器完成初始化工作,web服务器关闭时,过滤器销毁。过滤器的创建:实现Filter接口注解配置过滤器package com.woniuxy.filter;import javax.servlet.*;import javax.servlet.annotation.WebFilter;import java.io.IOException
摘要由CSDN通过智能技术生成
过滤器

web项目三大组件之一,工作在servlet之前。

应用场景:统一设置字符编码集、敏感词汇的过滤、登录校验、权限验证等。

生命周期:web服务器启动时,过滤器完成初始化工作,web服务器关闭时,过滤器销毁。

过滤器的创建:实现Filter接口

注解配置过滤器

package com.woniuxy.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

/**
 * 过滤器实现
 * 实现javax.servlet.Filter接口
 * 具体的过滤逻辑在doFilter方法内部执行
 */
@WebFilter({
   "/*"})//注解配置过滤器,{"/*"}配置的是url-pattern,也可以在web.xml中配置
public class MyFilter implements Filter {
   
    /**
     * 过滤器完成初始化时调用的方法
     * @param filterConfig
     * @throws ServletException
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
   
        System.out.println("MyFilter过滤器完成初始化");
    }

    /**
     * 用于处理具体的过滤业务,执行放行操作。
     * @param servletRequest    :请求对象
     * @param servletResponse   :响应对象
     * @param filterChain       :过滤器链   如果要放行,使用该对象调用doFilter(请求对象,响应对象)
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
   
        System.out.println("MyFilter过滤器开始执行过滤的逻辑");
        //放行
        filterChain.doFilter(servletRequest,servletResponse);
    }

    /**
     * 过滤器销毁时调用的方法
     */
    @Override
    public void destroy() {
   
        System.out.println("MyFilter过滤器销毁了");
    }
}

web.xml中配置过滤器

    <filter>
        <filter-name>myFilter</filter-name>
        <filter-class>com.woniuxy.filter.MyFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>myFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

注意:不要同时使用注解和xml配置,任选其中一种即可。

过滤器链的执行顺序

1、使用web.xml配置

则过滤器链的执行顺序由<filter-mapping>的配置顺序来决定。

2、使用注解配置

过滤器链的执行顺序由filter名称的字母顺序来决定。

建议:在编程时,尽量不要让某个过滤器依赖于其他过滤器产生的数据。只要规避了这个问题,则无需考虑过滤器链的执行顺序。

统一设置字符编码

web.xml

	<filter>
        <filter-name>charset</filter-name>
        <filter-class>com.woniuxy.filter.CharsetFilter</filter-class>
        <!--设置过滤器初始化参数,指定过滤器要使用的字符编码-->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>charset</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

CharsetFilter

package com.woniuxy.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

/**
 * 统一设置字符编码集
 */
public class CharsetFilter implements Filter {
   
    private String encoding;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
   
         String value = filterConfig.getInitParameter("encoding");
        if (null==value) {
   
            encoding="UTF-8";
        }else{
   
            encoding=value;
        }
    }

    /**
     * 在过滤器的doFilter方法内部统一设置字符编码集
     * @param servletRequest
     * @param servletResponse
     * @param filterChain
     * @throw
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值