服务器文件如何防止盗链,如何防止独立Java webapp服务器上的盗链?

下面是一个例子滤波器的实现:

public class HotLinkFilter implements Filter{

private final Map PATTERNS =

new ConcurrentHashMap();

private void addPatterns(final String targetPattern,

final String referrerPattern){

PATTERNS.put(Pattern.compile(targetPattern),

Pattern.compile(referrerPattern));

}

@Override

public void init(final FilterConfig config) throws ServletException{

@SuppressWarnings("unchecked")

final Enumeration parameterNames =

config.getInitParameterNames();

while(parameterNames.hasMoreElements()){

final String nextParam = parameterNames.nextElement();

if(nextParam.startsWith("pattern")){

final String[] patterns =

config.getInitParameter(nextParam).split("\\s+");

if(patterns.length == 2){

addPatterns(patterns[0], patterns[1]);

}

}

}

}

@Override

public void doFilter(final ServletRequest request,

final ServletResponse response,

final FilterChain chain) throws IOException, ServletException{

if(request instanceof HttpServletRequest){

final HttpServletRequest hsr = (HttpServletRequest) request;

final String referrer = hsr.getHeader("Referer");

boolean valid = true;

if(referrer != null){

final String requestUrl = hsr.getRequestURL().toString();

for(final Entry entry : PATTERNS.entrySet()){

if(entry.getKey().matcher(requestUrl).matches()

&& !entry.getValue().matcher(referrer).matches()){

valid = false;

break;

}

}

}

if(valid){

chain.doFilter(request, response);

} else{

// this is probably not the correct thing to do

throw new ServletException("Hotlinking not allowed");

}

}

}

@Override

public void destroy(){

}

}

它使用地图正则表达式模式。如果请求与左侧的模式相匹配,并且存在引用链接,则我们检查引荐链接是否匹配右侧的模式。您可以在web.xml配置此:

Hotlink-Filter

com.yourcompany.HotLinkFilter

pattern1

http://.*\.mysite.com/.*\.(jpe?g|gif|png)

http://.*\.mysite.com/.*

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值