实现敏感词汇过滤python,敏感词过滤怎么实现

  实现敏感词汇过滤python,敏感词过滤怎么实现

  1.过滤器过滤器的概念:在访问服务器资源时,过滤器可以拦截请求,完成登录验证、过滤敏感字符等一些特殊功能。

  实施步骤:1。定义一个类并实现接口过滤器

  2.复制方法

  3.配置拦截路径

  web.xml

  2.笔记

  注:1。首先,我们创建一个类来实现过滤器接口,并注释@WebFilter(/* )来过滤所有路径下的请求。

  @ webfilter (/* )公共类SensitiveWordFilter实现Filter {.} 2.复制类中的方法。doFilter方法的参数包括请求(req)、响应(resp)和当前过滤器链的对象(链)。

  然后创建一个存储敏感词的列表集。

  init方法中的参数是配置对象(config)。

  公共void doFilter(ServletRequest req,ServletResponse resp,FilterChain)引发ServletException,IOException {.} private list string list=new ArrayList();//敏感词汇集public void init(filter config config)引发servlet异常{.} public void destroy () {}

  3.配置拦截路径:拦截路径在init方法中配置(服务器启动时会调用init方法,只执行一次)。服务器启动后,会先尝试找到响应的敏感词汇文件(这里因为方便添加敏感词汇,也可以直接将敏感词汇写入列表集),然后遍历文本内容,将敏感词汇添加到之前创建的列表集中。

  Void init (filter config config)引发ServletException {try {//1。加载文件,获取文件的真实路径servlet context servlet context=config . getservlet context();string path=servlet context . getrealpath(/src/sensitive-vocabulary . txt );//2.读取文件buffered reader br=newbuffered reader(new filereader(realpath));//3、将文件的每一行数据添加到列表字符串line=nullwhile ((line=br.readLine())!=null){ list . add(line);} br . close();system . out . println(list);} catch(Exception e){ e . printstacktrace();}} 4.截取:首先新建一个代理对象,实现与真实对象相同的接口。

  再创建一个invoke(反射)方法,传入参数:proxy(代理对象),method(反射方法),args(增强后返回的集合)。方法中,判断是否是getParmeter方法后,如果是,从method方法中获取反射值并遍历,将获取的值中与敏感词相同的字符替换为“* * *”,然后返回增强后的值。

  public void do filter(servlet req req,servlet response resp,filter chain chain)抛出servlet异常,ioexception {//1。创建代理对象,增强getParmeter方法servletrequestproxy _ req=(servlet request)proxy . new proxy instance(req . get class()。getclassloader(),req.getclass()。getinterfaces(),new invocation handler(){ @ Override public Object invoke(Object proxy,Method method,Object[]args)Throwable {//增强getParmeter方法//判断是否为getParmeter方法if (method.getname()。equals( getparmeter ){//增强返回值//获取返回值String Value=(String)method . invoke(req,args);如果(值!=null){ for(String str:list){ if(value . contains(str)){ value=value . replace all(str, * * * );} } }返回值;}//判断方法名是否为getParameterMap //判断方法名是否为GetParameterValue返回Method.invoke (req,args);} });chain.doFilter(proxy_req,resp);}这样就可以屏蔽服务器中出现的敏感词。

  整个敏感词汇过滤器的代码如下:

  打包网页过滤器导入javax。servlet。*;导入javax。servlet。注释。网页过滤器;导入Java。io。缓冲阅读器;导入Java。io。filenotfoundexception导入Java。io。filereader导入Java。io。io异常;导入Java。郎。反思。调用处理程序;导入Java。郎。反思。方法;导入Java。郎。反思。代理人;导入Java。util。ArrayList导入Java。util。列表;/*敏感词汇过滤器*/@WebFilter(/* )公共类敏感词过滤器实现Filter { public void do Filter(servlet req req,ServletResponse resp,FilterChain)抛出ServletException,IOException { //1 .创建代理对象,增强获取参数方法servlet请求proxy _ req=(servlet请求)代理。新代理实例(请求。getclass().getClassLoader(),req.getClass().getInterfaces(),new invocation handler(){ @ Override public Object invoke(Object proxy,Method method,Object[] args)抛出可投掷的{ //增强获取参数方法//判断是否是获取参数方法if(method.getName().equals( getParmeter ){//增强返回值//获取返回值String value=(String)方法。invoke(req,args);如果(值!=null){ for(String str:list){ if(value。包含(str)){ value=value。替换所有(字符串, * * * );} } }返回值;} //判断方法名是否是getParameterMap //判断方法名是否是getParameterValue返回method.invoke(req,args);} });chain.doFilter(proxy_req,resp);}私有列表string list=new ArrayList();//敏感词汇集合公共void初始化(过滤器配置配置)引发ServletException { try { //1 .加载文件,获取文件真实路径servlet上下文servlet上下文=配置。get servlet context();字符串真实路径=servlet上下文。获取真实路径(/src/敏感词汇. txt’);//2.读取文件缓冲读取器br=新缓冲读取器(新文件读取器(realPath));//3,将文件的每一行数据添加到目录中string line=null while((line=br . readline())!=null){ list。添加(行);} br。close();系统。出去。println(列表);} catch(Exception e){ e . printstacktrace();} }公共void destroy() { }}

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: