一、目录结构
二、输写DlFilter.java文件
package Daolian;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Properties;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DlFilter implements Filter {
// 限制访问地址列表
public static List urlNoAccess = new ArrayList();
// 允许访问列表
public static List urlAllow = new ArrayList();
// 错误地址列表
public static String urlError = "";
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
// 获取HTTP头文件
String requestAddress = httpRequest.getRequestURL().toString();
String requestHeader = httpRequest.getHeader("referer");
if(!requestAddress.startsWith(urlError))
{
//循环止访问列表
for (int i = 0; i < urlNoAccess.size(); i++) {
//如果(请求头为空 或者 请求头为禁访问目录)并且请求地址为禁止访问目录
//转向错误文件
if ((requestHeader == null || requestHeader.startsWith(urlNoAccess.get(i).toString().trim()))
&& requestAddress.startsWith(urlNoAccess.get(i).toString().trim())) {
if (urlError == null || urlError.equals("")) {
httpResponse.sendError(404);
} else {
httpResponse.sendRedirect(urlError.trim());
}
return;
}
//如果请求头为禁访问目录
if (requestAddress.startsWith(urlNoAccess.get(i).toString().trim())) {
boolean flog = true;
//如果请求头文件 不在允许请求范围内
if (urlAllow != null && urlAllow.size() > 0) {
for (int j = 0; j < urlAllow.size() && flog; j++) {
if (requestHeader.startsWith(urlAllow.get(j).toString().trim())) {
flog = false;
}
}
}
if (!flog) {
if (urlError == null || urlError.equals("")) {
httpResponse.sendError(404);
} else {
httpResponse.sendRedirect(urlError.trim());
}
return;
}
}
}
}
chain.doFilter(httpRequest, httpResponse);
}
public void init(FilterConfig fc) throws ServletException {
// TODO Auto-generated method stub
System.out.println("盗链起动");
try {
String fp = fc.getServletContext().getRealPath(
"/WEB-INF/classes/filter.properties");
File file = new File(fp);
Properties properties = new Properties();
properties.load(new FileInputStream(file));
// 限制访问地址
String urlfilter = properties.getProperty("url.noAccess");
if (urlfilter != null) {
String[] filter = urlfilter.split(",");
for (int i = 0; i < filter.length; i++) {
urlNoAccess.add(((String)filter[i]).trim());
}
}
// 根目录
String urlroot = properties.getProperty("url.allow");
if (urlroot != null) {
String[] allow = urlroot.split(",");
for (int i = 0; i < allow.length; i++) {
urlAllow.add(((String)allow[i]).trim());
}
}
// 文件错误地址
urlError = properties.getProperty("url.error");
} catch (Exception e) {
e.printStackTrace();
}
}
}
三、filter.properties配置文件
#url.noAccess 要过滤文件地址 多个文件以","隔开
url.noAccess=http://localhost:8080/filter/downloads
#url.allow 根目录文件列表 多个文件以","隔开
url.allow=http://127.0.0.1,http://localhost
#url.error 错误文件地址
url.error=http://localhost:8080/filter/error/error.jsp
四、web.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>daolian</filter-name>
<filter-class>Daolian.DlFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>daolian</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
- 大小: 12.2 KB
分享到:
相关推荐
java 防盗链 filter 可以避免网站 资源被其他网站 盗用。
一个ISAPI防盗链源码,用于IIS的ISAPI过滤器 LeechBlocker 可用于学习
java+struts2防盗链(filter不可过滤action), 非常详尽的文档!
matlab函数filter的C++简答实现
因为需要使用filter函数(MATLAB内置函数),曾在网上copy过一段代码,但是那个算法实现的不全,没有计算zf,所以我自己结合MATLAB帮助重写了一下,测试结果OK
KalmanFilter,KalmanFilter3,KalmanFilter5 一共7种,以上三种实现保证可用,其余待调试,调试函数写好,直接运行即可 KalmanFilter KalmanFilter2 KalmanFilter3 KalmanFilter4 KalmanFilter5 KalmanFilter6 Kalman...
博文链接:https://melin.iteye.com/blog/164113
Silverlight Filter实现
利用java filter 实现业务异常拦截 跳转到错误信息提示页面 我们在做项目中肯定都会遇到自定义业务异常 ,然后将业务异常信息跳转的统一的信息提示页面的情况,比如我们在struts的时候我们会用到struts的异常处理...
单点登录的demo(使用cookie+filter实现)
在MATLAB中通过FFT实现filter函数的功能,并且具有更快的速度。
递归差分方程实现filter
里的域指的是这样的一个概念:我们认为若协议 + 域名 + 端口号均相同,那么就是同域即我们常说的浏览器请求的同源策略。这篇文章主要介绍了JAVA通过Filter实现允许服务跨域请求,需要的朋友可以参考下
这是用rbac来实现的,用于对权限的路径的控制
ExtJs Grid Filter 实现表格的行过滤
filter过滤器实现权限访问控制以及同一账号只能登录一台设备
python实现高通滤波后进行频率积分。可以配置滤波器类型和滤波参数
学习笔记_CIC_filter及其matlab实现.doc
源码为实现过滤脏话的功能,使用了JSP中Filter类,将一些脏话封装在文本里面,当通过过滤器的内容包含这些字符时,将被替换为*
filter solutions 简易教程 方便实用