3 changed files with 106 additions and 0 deletions
@ -0,0 +1,77 @@ |
|||
package com.ruoyi.common.filter; |
|||
|
|||
import java.io.IOException; |
|||
import java.util.Arrays; |
|||
import java.util.List; |
|||
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; |
|||
|
|||
/** |
|||
* 防盗链过滤器 |
|||
* |
|||
* @author ruoyi |
|||
*/ |
|||
public class RefererFilter implements Filter |
|||
{ |
|||
/** |
|||
* 允许的域名列表 |
|||
*/ |
|||
public List<String> allowedDomains; |
|||
|
|||
@Override |
|||
public void init(FilterConfig filterConfig) throws ServletException |
|||
{ |
|||
String domains = filterConfig.getInitParameter("allowedDomains"); |
|||
this.allowedDomains = Arrays.asList(domains.split(",")); |
|||
} |
|||
|
|||
@Override |
|||
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) |
|||
throws IOException, ServletException |
|||
{ |
|||
HttpServletRequest req = (HttpServletRequest) request; |
|||
HttpServletResponse resp = (HttpServletResponse) response; |
|||
|
|||
String referer = req.getHeader("Referer"); |
|||
|
|||
// 如果Referer为空,拒绝访问
|
|||
if (referer == null || referer.isEmpty()) |
|||
{ |
|||
resp.sendError(HttpServletResponse.SC_FORBIDDEN, "Access denied: Referer header is required"); |
|||
return; |
|||
} |
|||
|
|||
// 检查Referer是否在允许的域名列表中
|
|||
boolean allowed = false; |
|||
for (String domain : allowedDomains) |
|||
{ |
|||
if (referer.contains(domain)) |
|||
{ |
|||
allowed = true; |
|||
break; |
|||
} |
|||
} |
|||
|
|||
// 根据检查结果决定是否放行
|
|||
if (allowed) |
|||
{ |
|||
chain.doFilter(request, response); |
|||
} |
|||
else |
|||
{ |
|||
resp.sendError(HttpServletResponse.SC_FORBIDDEN, "Access denied: Referer '" + referer + "' is not allowed"); |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public void destroy() |
|||
{ |
|||
|
|||
} |
|||
} |
|||
Loading…
Reference in new issue