如果其他网站引用本网站的资源比如图片,将会显示一个非法访问信息的提示网页;只有在本站的网页引用时,图片才会正常显示。设计并实现一个防盗链过滤器及其工作过程,在图片显示之前对request进行验证;假如在浏览器地址栏中输入“http://localhost:8080/images/1.jpg”直接访问图片时,过滤器将拦截并阻止访问,将请求跳转到显示一个非法访问信息的提示网页;在浏览器地址栏中输入“http://localhost:8080/images/image.jpg”站内访问图片时,能够显示图片。 (提示:想知道用户是从什么页面链接过来的,要用到referer。它是http协议,在JSP中采用如下方法获得: request.getHeader("referer"); 然后,通过refererr.contains(request.getServerName())语句判断是否本网站内的请求。)
时间: 2023-06-17 20:05:13 浏览: 148
网站扒站工具,网站资源下载工具,网站页面扒取
1. 创建一个过滤器类 MyFilter,实现 javax.servlet.Filter 接口。
```
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 初始化方法
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 过滤方法
}
@Override
public void destroy() {
// 销毁方法
}
}
```
2. 在 doFilter 方法中,判断请求是否来自本站。如果是本站请求,直接放行;否则,跳转到非法访问提示页面。
```
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
String referer = httpRequest.getHeader("referer");
if (referer != null && referer.contains(request.getServerName())) {
// 来自本站的请求,直接放行
chain.doFilter(request, response);
} else {
// 非法访问,跳转到提示页面
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect("/illegalAccess.html");
}
}
```
3. 在 web.xml 文件中配置过滤器。
```
<filter>
<filter-name>myFilter</filter-name>
<filter-class>com.example.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/images/*</url-pattern>
</filter-mapping>
```
4. 在项目根目录下创建 illegalAccess.html 文件,用于显示非法访问提示信息。
这样,当用户直接访问图片时,会被 MyFilter 拦截,并跳转到非法访问提示页面;而当用户从本站页面链接过来时,可以正常显示图片。
阅读全文