在SpringBoot+Vue的一个招聘网站中如何进行敏感词的过滤?底层的逻辑是什么?具体实现代码是什么?
敏感词过滤可以分为前端和后端两部分:
-
前端过滤:在Vue中可以使用正则表达式或者第三方库进行敏感词过滤,例如使用插件vue-bad-words。
-
后端过滤:在SpringBoot中可以使用过滤器进行敏感词过滤,具体实现步骤如下:
(1)新建一个过滤器类SensitiveFilter,实现javax.servlet.Filter接口。
(2)在doFilter方法中获取请求参数,通过遍历敏感词库,使用正则表达式或者KMP算法进行匹配,如果匹配到敏感词则替换成*或者抛出异常。
(3)在WebConfig中注册SensitiveFilter。
具体实现代码如下:
SensitiveFilter.java
package com.example.filter;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@Component
@WebFilter(urlPatterns = {"/*"})
public class SensitiveFilter implements Filter {
private List<String> words = new ArrayList<>();
@Override
public void init(FilterConfig filterConfig) throws ServletException {
words.add("敏感词1");
words.add("敏感词2");
words.add("敏感词3");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String content = req.getParameter("content");
for (String word : words) {
if (content.contains(word)) {
content = content.replaceAll(word, "**");
}
}
req.setAttribute("content", content);
chain.doFilter(req, response);
}
@Override
public void destroy() {
}
}
WebConfig.java
package com.example.config;
import com.example.filter.SensitiveFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Bean
public FilterRegistrationBean<SensitiveFilter> sensitiveFilter() {
FilterRegistrationBean<SensitiveFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new SensitiveFilter());
registrationBean.addUrlPatterns("/*");
registrationBean.setName("SensitiveFilter");
registrationBean.setOrder(1);
return registrationBean;
}
}
在以上代码中,敏感词库以List
原文地址: https://www.cveoy.top/t/topic/e3k2 著作权归作者所有。请勿转载和采集!