栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java敏感字符过滤

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java敏感字符过滤

敏感字符过滤器
  • 1.读取资源文件类properties
  • 2.读取txt

1.读取资源文件类properties

properties使用键值对的形式
可以根据一个键值获得对应的一个值

package src.filter;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Properties;
import java.util.Set;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
//这里使用注解的方式
@WebFilter(filterName = "Str2Filter",urlPatterns = "/*")
public class Str2Filter implements Filter {

    public void destroy() {}

    //java有一个特殊的Properties属性类来读取属性文件
    private Properties ps = new Properties();

    public void init(FilterConfig filterConfig) throws ServletException {
        //得到ServletContext容器
        ServletContext context = filterConfig.getServletContext();

        //要context通过流的方式读取/WEB-INF/下面的资源文件
        //Resource: 资源文件
        //Stream:   流
        InputStream is = context.getResourceAsStream("/WEB-INF/Str.properties");

        //装载文件到ps
        try {
            ps.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }

        //得到所有的key
        Set keys = ps.keySet();
        for (Object key : keys) {
            //根据key得到属性文件中的value
            String value = ps.getProperty(key.toString());

            System.out.println(key+"---"+value);
        }



    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
                         FilterChain filterChain) throws IOException, ServletException {

        //转子接口
        ServletRequest req=(ServletRequest) Proxy.newProxyInstance(servletRequest.getClass().getClassLoader(), servletRequest.getClass().getInterfaces(), new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                if (method.getName().equals("getParameter")){
                    String value=(String)method.invoke(servletRequest,args);
                    if (value!=null){
                        Set keys=ps.keySet();
                        for (Object key:keys){
                            if (value.indexOf(key.toString())!=-1){
                                value=value.replaceAll(key.toString(),ps.getProperty(key.toString()));
                            }
                        }
                    }
                    return value;
                }
                return method.invoke(servletRequest,args);
            }
        });

        //安保放行
        filterChain.doFilter(req, servletResponse);


    }



}

 
2.读取txt 

txt使用文本形式
可以将值特换成**

package src.filter;

import java.io.*;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.*;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

@WebFilter(filterName = "StrFilter",urlPatterns = "/*")
public class StrFilter implements Filter {
    private List list=new ArrayList<>();
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        try {
            ServletContext context=filterConfig.getServletContext();
            String path=context.getRealPath("/WEB-INF/Str.txt");
            BufferedReader br=new BufferedReader(new FileReader(path));
            String line=null;
            while ((line=br.readLine())!=null){
                list.add(line);
            }
            br.close();
            System.out.println(list);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        ServletRequest req=(ServletRequest) Proxy.newProxyInstance(servletRequest.getClass().getClassLoader(), servletRequest.getClass().getInterfaces(), new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                if (method.getName().equals("getParameter")){
                    String value=(String)method.invoke(servletRequest,args);
                    if (value!=null){
                        for (String str:list){
                            if (value.contains(str)){
                                value=value.replaceAll(str,"**");
                            }
                        }
                    }
                    return value;
                }
                return method.invoke(servletRequest,args);
            }
        });
        filterChain.doFilter(req, servletResponse);
    }

    @Override
    public void destroy() {}
}

两篇代码都差不多,都是敏感字符替换,希望对你有所帮助

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号