拦截器拦截敏感词

案例实现:

需求:

1.点击发表评论页面topic.jsp,可以在showTopic.jsp显示内容

2.如果发表的评论内容,有关键字“苹果”、“香蕉”,就返回topic,并提示有禁用词

3.要求发表评论到showTopic.jsp时,经过过滤器处理

4.禁用词,配置在过滤器,在启动项目时动态获取,注意处理中文

代码
topic.jsp

注意:由于csdn上的代码块没有jsp的选择,所有使用的是xml的代码块,请看清类名是什么

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


发表对阿凡达电影的评价

过滤词:苹果,香蕉 ${errorInfo}
用户:
评论:
showTopic.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


你发表的评论是

评论内容:<%=request.getParameter("content")%>
web.xml文件的配置
 
        TopicFilter
        com.filter.TopicFilter

        
            forbiddenword
            苹果,香蕉
        
    
    
        TopicFilter
        /topic/*
    
过滤器
package com.filter;

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

public class TopicFilter implements Filter {
    //属性->存放禁用词
    private String[] forbiddenWords=null;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //获取禁用词
        String forbiddenword = filterConfig.getInitParameter("forbiddenword");
        forbiddenWords=forbiddenword.split(",");


    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //解决topic.jsp 提交的中文乱码问题
        servletRequest.setCharacterEncoding("utf-8");

        //判断评论是不是有禁用词
        String content = servletRequest.getParameter("content");
        //循环遍历
        for (String forbiddenWord : forbiddenWords) {

            if(content.contains(forbiddenWord)){
                //返回topic.jsp
                servletRequest.setAttribute("errorInfo","输入的有禁用词");
                servletRequest.getRequestDispatcher("/topic.jsp")
                        .forward(servletRequest,servletResponse);
                return;
            }
        }
//        继续到目标
        filterChain.doFilter(servletRequest,servletResponse);

    }

    @Override
    public void destroy() {

    }
}

你可能感兴趣的:(韩顺平学习笔记,java,笔记,web)