- 1.读取资源文件类properties
- 2.读取txt
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
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() {}
}
两篇代码都差不多,都是敏感字符替换,希望对你有所帮助



