防盗链"/>
Http请求防盗链
什么是防盗链
比如A网站有一张图片,被B网站直接通过img标签属性引入,直接盗用A网站图片展示。
尤其是视频网站
如何实现防盗链
判断http请求头Referer域中的记录来源的值,如果和当前访问的域名不一致的情况下,说明该图片可能被其他服务器盗用。
使用过滤器拦截请求,判断请求头中的域名与需要限制的域名访问是否一致,如果不一致的情况,说明可能被盗用。
使用过滤器判断请求头Referer记录请求来源
@WebFilter(filterName = "imgFilter", urlPatterns = "/imgs/*")
public class ImgFilter implements Filter {//限制的访问域名@Value("${domain.name}")private String domainName;public void init(FilterConfig filterConfig) throws ServletException {}public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request;String referer = req.getHeader("Referer");if (StringUtils.isEmpty(referer)) {request.getRequestDispatcher("/imgs/error.png").forward(request, response);return;}String domain = getDomain(referer);if (!domain.equals(domainName)) {request.getRequestDispatcher("/imgs/error.png").forward(request, response);return;}chain.doFilter(request, response);}/*** 获取url对应的域名** @param url* @return*/public String getDomain(String url) {String result = "";int j = 0, startIndex = 0, endIndex = 0;for (int i = 0; i < url.length(); i++) {if (url.charAt(i) == '/') {j++;if (j == 2)startIndex = i;else if (j == 3)endIndex = i;}}result = url.substring(startIndex + 1, endIndex);return result;}public void destroy() {}
}
更多推荐
Http请求防盗链
发布评论