防盗链
- 为防止,资源被窃取,通过取到,访问的请求头和自己的工程头像匹配,来实现简单的,防盗。本项目内访问时request.getHeader(“request”)(请求头)为null,而外部站点访问,值就为,外部站点的来源路径,借此可以判断,防盗,但是存在一个问题,当访问路径于本站名,相似时,会判定为站点内访问!
<%
//取到请求的头部名
String requestHead=request.getHeader("request");
System.out.println("请求头"+requestHead);
//取到本项目的 路径
String Ihead=request.getContextPath();
System.out.print("项目路径"+Ihead);
//站点内访问为空,requestHead==null
if(requestHead==null||Ihead.contains(requestHead)){
//是本站点内的访问
}else{
//不是本站点内的访问
}
%>
过滤器
过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的:
- 在客户端的请求访问后端资源之前,拦截这些请求。
在服务器的响应发送回客户端之前,处理这些响应。
* 根据规范建议的各种类型的过滤器:*
身份验证过滤器(Authentication Filters)。
数据压缩过滤器(Data compression Filters)。
加密过滤器(Encryption Filters)。
触发资源访问事件过滤器。
图像转换过滤器(Image Conversion Filters)。
日志记录和审核过滤器(Logging and Auditing Filters)。
MIME-TYPE 链过滤器(MIME-TYPE Chain Filters)。
标记化过滤器(Tokenizing Filters)。
XSL/T 过滤器(XSL/T Filters),转换 XML 内容。
JAVA 类
- 建立一个类,继承Filter(javax.servlet.Filter包),实现destroy()、doFilter()、init() 这三个方法,使其变成一个过滤器。
public class Test implements Filter{
@Override
public void destroy() {
// 销毁过滤器时,调用
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//把服务器请求,转换成网络服务器请求
HttpServletRequest arg0=(HttpServletRequest)request;
HttpServletResponse arg1=(HttpServletResponse)response;
//取到请求的
String requestHead=arg0.getHeader("request");
System.out.println("请求头"+requestHead);
//取到本项目的 路径
String Ihead=arg0.getContextPath();
if(requestHead==null||Ihead.contains(requestHead)){
//是本站访问
//过滤器放行, 使用 过滤器锁(FilterChain) 调用放行方法(doFilter)
//参数一 请求 参数二 响应
chain.doFilter(arg0, arg1);
}else{
//是外部站点访问
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//第一次启动时调用
}
}
配置过滤器
打开web.xml 配置过滤器,此步骤,必须要做!
<filter>
<filter-name>glvq</filter-name>
<filter-class>entity.Test</filter-class>
</filter>
<!--映射过滤器-->
<filter-mapping>
<filter-name>glvq</filter-name>
<!-- / 需要过滤的文件夹或者文件,*代表过滤所有 -->
<url-pattern>/*</url-pattern>
</filter-mapping>