过滤器实现评论内容的限制,玫感字和字数,分别用两个Filter实现

本文介绍了如何使用Java实现两个过滤器,第一个过滤器用于检查评论内容是否包含敏感字,如果存在则阻止请求继续处理,第二个过滤器则检查评论的字数是否超过指定限制,超过则返回提示信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一个filter

package com.filter;


import java.io.UnsupportedEncodingException;


import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class CommentFilter implements Filter{

private FilterConfig config;//定义属性,保存容器传过来的参数
/**
* 容器启动之后会立即创建过滤器实例(通过调用构造器)
* 注;只会创建一个实列
*/
public CommentFilter() {
System.err.println("CommentFilter构造器被调用");
}



/**
* 容器在创建爱你好过滤器之后,会立即调用该实列的init方法(初始化方法)
* 注;
* 该方法只会执行一次
* 容器会将FilterConfig对象作为参数传进来,可以利用该对象读取参数初始化参数
*/
public void init(FilterConfig filterConfig) throws ServletException {
config = filterConfig;
System.err.println("容器的init方法被调用了");
}
/**
* 容器绶带请求之后,会调用doFilter方法处理请求
* 容器会将请求对象和响应对象作为参数传进来
* 注
* ServletRequest是httpServletRequest的父接口
* ServletResponse是httpServletResponse的父接口
* 这儿没有用字接口,是过渡设计的产物
* FilterChain chain---过滤器链,如果调用了FilterChain chain对象的doFilter方法,表示向后调用,
* 负责,中断请求,返回处理结果



*/
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain chain) {
System.err.println("CommentFilter的doFilter开始执行");


HttpServletRequest request = (HttpServletRequest)arg0;
HttpServletResponse response = (HttpServletResponse)arg1;
try {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");

String content = request.getParameter("content");

//调用FilterConfig对象的方法来读取初始化参数
String illegal = config.getInitParameter("illegal");//玫感字

System.out.println(illegal);

if(content.indexOf(illegal) != -1) {
//包含美感字,不再向后调用
response.getWriter().print("评论的内容包含了美感字");
}else {
//没有包含美感字,则继续向后调用,Filter链doFilter的方法
chain.doFilter(request, response);
}
} catch (Exception e) {
e.printStackTrace();
}

System.err.println("CommentFilter的doFilter执行完毕");
}
//当容器删除过滤器实列之前,会先调用该实列的destroy方法,该方法只执行一次
public void destroy() {
System.err.println("容器被销毁了destroy");
}


}



















第二个filter

package com.filter;


import java.io.IOException;
import java.io.PrintWriter;


import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class CountFilter implements Filter{
private FilterConfig config;


public void init(FilterConfig filterConfig) throws ServletException {
config = filterConfig;
}


public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest  request = (HttpServletRequest)arg0;
HttpServletResponse response = (HttpServletResponse)arg1;
PrintWriter out = response.getWriter();
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
String lengthsize = config.getInitParameter("length");//字数

String content = request.getParameter("content");//获取评论的内容
if(content.length() >Integer.parseInt(lengthsize)) {//评论的字数如果大于10
response.getWriter().print("您输入的字数过长");
}else {
//没有包含美感字,则继续向后调用,Filter链doFilter的方法
chain.doFilter(request, response);
}
}
public void destroy() {

}

}



















web.xml配置文件

需要配置过滤器和初始化参数,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值