拦截器拦截敏感词

案例实现:

需求:

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" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>发表对阿凡达电影的评价</h1>
过滤词:苹果,香蕉 ${errorInfo}
<form method="post" action="<%=request.getContextPath()%>/topic/showTopic.jsp">
    用户:<input type="text" name="username" /><br/>
    评论:<textarea rows="10" name="content" cols="20"></textarea><br/>
    <input type="submit" value="发表评论" />
</form>

</body>
</html>
showTopic.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>你发表的评论是</h1>
评论内容:<%=request.getParameter("content")%>
</body>
</html>
web.xml文件的配置
 <filter>
        <filter-name>TopicFilter</filter-name>
        <filter-class>com.filter.TopicFilter</filter-class>
<!--        配置禁用词-->
        <init-param>
            <param-name>forbiddenword</param-name>
            <param-value>苹果,香蕉</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>TopicFilter</filter-name>
        <url-pattern>/topic/*</url-pattern>
    </filter-mapping>
过滤器
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() {

    }
}

  • 29
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值