当前位置: 首页 > wzjs >正文

wordpress 自动采集插件北京网站seo排名

wordpress 自动采集插件,北京网站seo排名,媒易网络网站建设培训,网站建设管理方案在 Spring Boot 项目中实现防盗链可以通过多种方式,下面为你介绍两种常见的实现方法,分别是基于请求头 Referer 和基于令牌(Token)的防盗链。 基于请求头 Referer 的防盗链 这种方法通过检查请求头中的 Referer 字段&#xff0c…

在 Spring Boot 项目中实现防盗链可以通过多种方式,下面为你介绍两种常见的实现方法,分别是基于请求头 Referer 和基于令牌(Token)的防盗链。

基于请求头 Referer 的防盗链

这种方法通过检查请求头中的 Referer 字段,判断请求是否来自合法的来源。如果不是,则拒绝该请求。
以下是实现步骤和示例代码:

  1. 创建一个过滤器:用于拦截请求并检查 Referer 字段。
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;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;public class AntiLeachingFilter implements Filter {private List<String> allowedReferers;@Overridepublic void init(FilterConfig filterConfig) throws ServletException {String refererConfig = filterConfig.getInitParameter("allowedReferers");if (Objects.nonNull(refererConfig)) {allowedReferers = Arrays.asList(refererConfig.split(","));}}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;String referer = httpServletRequest.getHeader("Referer");boolean isAllowed = false;if (Objects.isNull(referer)) {isAllowed = false;} else {for (String allowedReferer : allowedReferers) {if (referer.contains(allowedReferer)) {isAllowed = true;break;}}}if (isAllowed) {filterChain.doFilter(httpServletRequest, httpServletResponse);} else {httpServletResponse.sendError(HttpServletResponse.SC_FORBIDDEN, "Access Denied");}}@Overridepublic void destroy() {Filter.super.destroy();}
}
  1. 配置过滤器:在 Spring Boot 中注册该过滤器。
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class FilterConfig {@Beanpublic FilterRegistrationBean<AntiLeachingFilter> filterRegistrationBean() {FilterRegistrationBean<AntiLeachingFilter> registration = new FilterRegistrationBean<>();registration.setFilter(new AntiLeachingFilter());registration.addInitParameter("allowedReferers", "127.0.0.1");registration.addUrlPatterns("/*");return registration;}}

基于令牌(Token)的防盗链

此方法为每个请求生成一个唯一的令牌,并在请求时验证令牌的有效性。
以下是实现步骤和示例代码:

  1. 创建令牌生成和验证工具类:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Date;public class TokenGeneratorUtils {private static final String SECRET_KEY = "4t3t35y546yertdgsr3w4";/*** 生成用于防盗链的令牌(Token)。* 该方法通过将资源路径、过期时间和密钥拼接后进行 SHA-256 哈希计算,* 最终将计算得到的哈希值转换为十六进制字符串作为令牌返回。** @param resourcePath  请求的资源路径,用于标识具体要访问的资源* @param expirationTime 令牌的过期时间,以毫秒为单位* @return 生成的令牌,是一个十六进制字符串*/public static String generateToken(String resourcePath, long expirationTime) {String date = resourcePath + expirationTime + SECRET_KEY;try {// 借助 MessageDigest.getInstance("SHA-256") 方法获取一个 MessageDigest 实例,// 该实例使用的哈希算法为 SHA-256。SHA-256 属于安全哈希算法,能够将任意长度的输入数据转换为固定长度(256 位)的哈希值。MessageDigest digest = MessageDigest.getInstance("SHA-256");//调用 digest 方法对拼接后的字符串 data 进行哈希计算,返回一个字节数组 hash,此数组就是 data 的 SHA-256 哈希值。byte[] hash = digest.digest(date.getBytes());StringBuilder hexString = new StringBuilder();for (byte b : hash) {//字节转换为对应的十六进制字符串。String hex = Integer.toHexString(0xff & b);if (hex.length() == 1) {//转换后的十六进制字符串长度为 1,在前面补一个 0,以保证每个字节都用两位十六进制数表示。hexString.append('0');}//转换后的十六进制字符串追加到 hexString 中。hexString.append(hex);}return hexString.toString();} catch (NoSuchAlgorithmException e) {throw new RuntimeException(e);}}public static boolean verifyToken(String resourcePath, String token, long expirationTime) {if (new Date().getTime() > expirationTime) {return false;}String generatedToken = generateToken(resourcePath, expirationTime);return generatedToken.equals(token);}}
  1. 创建控制器处理请求并验证
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.Date;@RestController
@Slf4j
public class TestController {/*** curl --location '127.0.0.1:2223/test' \* --header 'Referer: 127.0.0.1'** header头不传合法的Referer 127.0.0.1则拒绝访问* @return*/@RequestMapping("/test")public String test() {return "ok";}@GetMapping("/protectedResource")public ResponseEntity<String> getProtectedResource(@RequestParam String token, @RequestParam long expirationTime) {String resourcePath = "/protectedResource";if (TokenGeneratorUtils.verifyToken(resourcePath, token, expirationTime)) {return ResponseEntity.ok("Access granted");} else {return ResponseEntity.status(HttpStatus.FORBIDDEN).body("Invalid token");}}public static void main(String[] args) {// 资源路径String resourcePath = "/protectedResource";// 设置令牌过期时间,这里设置为当前时间往后 1 小时long expirationTime = new Date().getTime() + 3600 * 1000;// 生成令牌String token = TokenGeneratorUtils.generateToken(resourcePath, expirationTime);System.out.println(token);System.out.println(expirationTime);}
}

总结

  • 基于请求头 Referer 的防盗链:实现简单,但 Referer 字段容易被伪造。
  • 基于令牌(Token)的防盗链:安全性较高,但实现相对复杂,需要处理令牌的生成和验证逻辑。

文章转载自:

http://RTqcBKGE.fwkpp.cn
http://jfIDJDyw.fwkpp.cn
http://XnZFe2oc.fwkpp.cn
http://eoqaOHBO.fwkpp.cn
http://sD7ZyVUq.fwkpp.cn
http://MpQzJgAQ.fwkpp.cn
http://Zqsj7DLJ.fwkpp.cn
http://tfJyFufL.fwkpp.cn
http://sTuAojhJ.fwkpp.cn
http://nc1VIIGp.fwkpp.cn
http://K90RGgdJ.fwkpp.cn
http://CBAS2daj.fwkpp.cn
http://t598lXpG.fwkpp.cn
http://S7OPhErr.fwkpp.cn
http://IZOSWP8o.fwkpp.cn
http://p9zEDmYo.fwkpp.cn
http://jr9X3IcD.fwkpp.cn
http://eAVrfCmf.fwkpp.cn
http://fomXSYKg.fwkpp.cn
http://qK1RUrJg.fwkpp.cn
http://NNHG3O7F.fwkpp.cn
http://rVYpvEVx.fwkpp.cn
http://htRenwyc.fwkpp.cn
http://rGmt9jkI.fwkpp.cn
http://VBLN1Sl4.fwkpp.cn
http://gVH4NtI8.fwkpp.cn
http://raKgOVFY.fwkpp.cn
http://EeRkAIwm.fwkpp.cn
http://ZXSNps1L.fwkpp.cn
http://mkOrs6Di.fwkpp.cn
http://www.dtcms.com/wzjs/763182.html

相关文章:

  • 支付宝手机网站23短视频平台
  • 网站顶部悬浮导航代码外贸跟单的流程
  • 馆陶网站镇江久一信息技术有限公司
  • 喊别人做的网站不肯给代码seo搜索优化
  • 厦门网站建设公司排名ui设计
  • 广州专业网站制作设计渭南做网站哪家好
  • 可以做调查的网站商城推广软文范文
  • 网站开发与维护实训总结天津 网站建设
  • 如何用天地图做网站粉色系 wordpress
  • 网站制作报价明细表制作ppt的软件手机版
  • 谢馥春网站建设的优势做58推广网站找哪家好
  • 带后台的免费网站模板东莞银行
  • 网站做接口怎么做做暖暖视频网站观看
  • 如何让网站给百度收录网站权限分配 数据库实现
  • 艺术家网站源码公司注册地址规定
  • 接单做公司网站站群邯郸市内最新招聘信息
  • 教育网站都有哪些网站设计与制作的基本步骤
  • 网站建设代理怎么做网站制作公司徐州
  • 部门门户网站建设请示企业做网站价格
  • 网站纯色背景图怎么做网络营销方法选择
  • 免费网站app产品网站建设建议
  • 一级站点和二级站点区别在百度上怎么建立网站吗
  • 网网站开发站制作公司wordpress充值中心
  • 苏州行业网站建设服务eclipse网站开发流程
  • 网站小程序制作公司申请网站做自己的产品
  • 唐山网站建设外包公司哪家好国际军事最新军事新闻
  • 那些公司需要网站开发工程师自己有域名怎么做免费网站
  • dw网站模板免费下载室内设计培训班哪家好
  • 怎样增加网站收录量免费做国际网站有哪些
  • 做导航网站赚钱网站建设人才简历