精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

別怕泄露!」Spring Boot 秒生成簽名 URL,輕松搞定私有文件安全訪問!

開發 前端
簽名 URL 的本質,是將?請求方法、資源路徑、過期時間?等核心信息組合后,通過?加密簽名算法(如 HMAC-SHA256)計算出校驗值。?只有在簽名校驗通過、并且未過期時,才能訪問對應的私有文件。

在現代應用系統中,文件訪問是幾乎繞不開的功能點。無論是用戶上傳的頭像、合同 PDF,還是后臺生成的報表文件,系統都需要考慮如何在保證 安全 的前提下,實現 便捷訪問。

僅依賴用戶身份認證有時并不足夠,因為某些場景下,我們需要給外部系統或臨時用戶開放有限時間的訪問權限,而不可能為其建立長期有效的賬號和密碼。此時,簽名 URL(Signed URL)便成為最佳選擇。

簽名 URL 具備以下兩個關鍵特征:

  1. 帶有過期時間:一旦時間到期,鏈接自動失效,避免長期暴露。
  2. 包含數字簽名:只有服務端能生成正確的簽名,客戶端無法偽造,確保鏈接可信。

結合 Spring Boot 提供的靈活配置與加密工具,我們可以非常高效地實現這一機制。本文將帶你逐步完成從配置、簽名生成、文件驗證到前端測試頁面的完整流程。

簽名 URL 基礎機制

簽名 URL 的設計思路

簽名 URL 的本質,是將 請求方法、資源路徑、過期時間 等核心信息組合后,通過 加密簽名算法(如 HMAC-SHA256)計算出校驗值。 只有在簽名校驗通過、并且未過期時,才能訪問對應的私有文件。

這種設計有兩個顯著優點:

  • 無需額外賬號體系:直接通過 URL 控制訪問權限。
  • 輕量安全:過期時間 + 簽名雙重保護,有效防止鏈接被篡改或長期傳播。

簽名 URL 的結構

簽名 URL 的樣子和普通 HTTP 鏈接差不多,只是附帶了額外參數:

https://oss.example.com/photos/architecture.png?expires=1755990064&sign=sefxxfx

關鍵參數解釋:

  • expires:Unix 時間戳,表示鏈接過期時間。
  • sign:加密簽名,確保鏈接未被篡改。

服務器端會在收到請求時:

  1. 檢查當前時間是否超過 expires;
  2. 使用同樣的算法重新計算簽名,和 sign 對比。

Spring Boot 實戰

下面我們基于 Spring Boot 來實現簽名 URL 生成與驗證

src/main/java/com/icoderoad/security/signurl
├── config
│   └── LinkProperties.java
├── util
│   └── SignatureUtil.java
├── service
│   └── LinkService.java
└── controller
    └── FileAccessController.java

配置類

package com.icoderoad.security.signurl.config;


import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;


@Component
@ConfigurationProperties(prefix = "pack.app")
public class LinkProperties {


    private String secretKey;
    private String algs;
    private long lifetimeSeconds;
    private String method;
    private String accessPath;


    // getters & setters
}

application.yml 配置:

pack:
  app:
    algs: HmacSHA256
    lifetime-seconds: 1800
    method: get
    secret-key: aaaabbbbccccdddd
    accessPath: /files

簽名工具類

package com.icoderoad.security.signurl.util;


import com.icoderoad.security.signurl.config.LinkProperties;
import org.springframework.stereotype.Component;


import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;


@Component
public class SignatureUtil {


    private final LinkProperties linkProperties;
    private final byte[] secret;


    public SignatureUtil(LinkProperties linkProperties) {
        this.linkProperties = linkProperties;
        this.secret = linkProperties.getSecretKey().getBytes(StandardCharsets.UTF_8);
    }


    public String signPath(String method, String path, long expires) throws Exception {
        String data = method + "|" + path + "|" + expires;
        String HMAC = linkProperties.getAlgs();
        Mac mac = Mac.getInstance(HMAC);
        mac.init(new SecretKeySpec(secret, HMAC));
        byte[] raw = mac.doFinal(data.getBytes(StandardCharsets.UTF_8));
        return Base64.getUrlEncoder().withoutPadding().encodeToString(raw);
    }
}

簽名 URL 服務類

package com.icoderoad.security.signurl.service;


import com.icoderoad.security.signurl.config.LinkProperties;
import com.icoderoad.security.signurl.util.SignatureUtil;
import org.springframework.stereotype.Service;


import java.time.ZonedDateTime;


@Service
public class LinkService {


    private final SignatureUtil signatureUtil;
    private final LinkProperties linkProperties;


    public LinkService(SignatureUtil signatureUtil, LinkProperties linkProperties) {
        this.signatureUtil = signatureUtil;
        this.linkProperties = linkProperties;
    }


    public String generateLink(String filePath) throws Exception {
        String canonicalPath = filePath.startsWith("/") ? filePath : "/" + filePath;
        long expiresAt = ZonedDateTime.now()
                .plusSeconds(linkProperties.getLifetimeSeconds())
                .toEpochSecond();
        String signature = signatureUtil.signPath(linkProperties.getMethod(), canonicalPath, expiresAt);
        return String.format("/%s%s?expires=%d&sign=%s",
                linkProperties.getAccessPath().replaceFirst("^/", ""),
                canonicalPath, expiresAt, signature);
    }
}

文件訪問控制器

package com.icoderoad.security.signurl.controller;


import com.icoderoad.security.signurl.config.LinkProperties;
import com.icoderoad.security.signurl.service.LinkService;
import com.icoderoad.security.signurl.util.SignatureUtil;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;


import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.file.*;
import java.security.MessageDigest;
import java.time.Instant;
import java.util.*;


@Controller
@RequestMapping("${pack.app.accessPath:/files}")
public class FileAccessController {


    private final SignatureUtil signatureUtil;
    private final LinkService linkService;
    private final LinkProperties linkProperties;


    public FileAccessController(SignatureUtil signatureUtil, LinkService linkService,
                                LinkProperties linkProperties) {
        this.signatureUtil = signatureUtil;
        this.linkService = linkService;
        this.linkProperties = linkProperties;
    }


    /** 展示頁面,生成文件簽名鏈接 */
    @GetMapping("")
    public String generateLinksForDirectory(Model model) throws Exception {
        String directoryPath = "/opt/data/images";
        List<String> links = new ArrayList<>();
        Path dirPath = Paths.get(directoryPath);


        if (Files.exists(dirPath) && Files.isDirectory(dirPath)) {
            Files.list(dirPath).filter(Files::isRegularFile).forEach(file -> {
                try {
                    String relativePath = dirPath.relativize(file).toString().replace("\\", "/");
                    links.add("http://localhost:8080" + linkService.generateLink(relativePath));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            });
        }
        model.addAttribute("links", links);
        return "preview";
    }


    /** 訪問文件接口 */
    @GetMapping("/{*path}")
    public void fetchFile(@PathVariable("path") String path,
                          @RequestParam long expires,
                          @RequestParam String sign,
                          HttpServletResponse response) throws Exception {


        long now = Instant.now().getEpochSecond();
        if (now >= expires) {
            response.sendError(HttpServletResponse.SC_FORBIDDEN, "鏈接已過期");
            return;
        }


        String expected = signatureUtil.signPath(linkProperties.getMethod(), path, expires);
        byte[] expectedBytes = Base64.getUrlDecoder().decode(expected);
        byte[] providedBytes = Base64.getUrlDecoder().decode(sign);


        if (!MessageDigest.isEqual(expectedBytes, providedBytes)) {
            response.sendError(HttpServletResponse.SC_FORBIDDEN, "無效鏈接");
            return;
        }


        Path filePath = Paths.get("/opt/data/images/", path).normalize();
        Resource resource = new UrlResource(filePath.toUri());
        if (!resource.exists()) {
            response.sendError(HttpServletResponse.SC_NOT_FOUND, "文件不存在");
            return;
        }


        String contentType = determineContentType(path);
        response.setContentType(contentType);
        Files.copy(resource.getFile().toPath(), response.getOutputStream());
        response.getOutputStream().flush();
    }


    private String determineContentType(String path) {
        if (path == null || !path.contains(".")) {
            return MediaType.APPLICATION_OCTET_STREAM_VALUE;
        }
        String extension = path.substring(path.lastIndexOf(".") + 1).toLowerCase();
        return switch (extension) {
            case "png" -> MediaType.IMAGE_PNG_VALUE;
            case "jpg", "jpeg" -> MediaType.IMAGE_JPEG_VALUE;
            case "pdf" -> MediaType.APPLICATION_PDF_VALUE;
            case "txt" -> MediaType.TEXT_PLAIN_VALUE;
            case "html" -> MediaType.TEXT_HTML_VALUE;
            default -> MediaType.APPLICATION_OCTET_STREAM_VALUE;
        };
    }
}

前端頁面(Thymeleaf + Bootstrap)

src/main/resources/templates/preview.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>簽名 URL 文件預覽</title>
    <link  rel="stylesheet">
</head>
<body class="bg-light">
<div class="container py-5">
    <h2 class="mb-4 text-center">簽名 URL 文件訪問測試</h2>


    <div class="card shadow-sm p-4">
        <h5 class="mb-3">生成的文件鏈接:</h5>
        <ul class="list-group">
            <li th:each="link : ${links}" class="list-group-item d-flex justify-content-between align-items-center">
                <span th:text="${link}"></span>
                <a th:href="${link}" class="btn btn-primary btn-sm" target="_blank">訪問</a>
            </li>
        </ul>
    </div>
</div>
</body>
</html>

效果:

  • 頁面會列出 /opt/data/images 目錄下的所有文件簽名 URL;
  • 點擊右側按鈕即可直接測試訪問。

測試流程

  1. 在 /opt/data/images 放入若干文件(jpg/png/pdf/txt)。
  2. 啟動 Spring Boot 項目。
  3. 瀏覽器訪問:
http://localhost:8080/files

頁面會展示簽名 URL 列表,點擊即可驗證訪問是否成功。

結論

通過本文完整實戰,我們實現了 簽名 URL 的后端生成 + 前端預覽:

  • 后端負責安全計算簽名、校驗過期時間,保證文件訪問的合規性;
  • 前端通過 Thymeleaf + Bootstrap 渲染文件列表,用戶可以一鍵點擊測試。

這種方式既簡潔又高效,尤其適合需要 臨時文件分享 的業務場景,比如:

  • 生成臨時下載地址
  • 限時訪問合同、賬單、報表
  • 文件分享的安全保護

未來如果你要在生產環境結合 OSS/S3/CDN,只需要替換文件存儲目錄和 URL 生成規則即可無縫擴展。

責任編輯:武曉燕 來源: 路條編程
相關推薦

2024-08-09 08:52:26

2025-04-03 07:56:08

電子簽名合同系統Spring

2025-03-03 08:00:00

SpringBootEasyExcel數據導出

2025-04-10 08:03:31

Spring系統

2025-02-17 00:00:45

接口支付寶沙箱

2025-11-07 08:01:59

2025-04-08 03:00:00

SpringDocker容器

2010-07-27 14:25:02

linux文件編碼

2020-04-23 15:59:04

SpringKafka集群

2021-09-30 06:31:12

Spring Boot配置密碼

2013-04-01 10:56:02

2022-06-23 08:42:08

配置加密解密

2023-05-23 14:53:26

鴻蒙應用開發

2009-08-17 08:45:34

Windows 7文件刪除

2025-05-13 07:13:25

2009-11-13 17:32:37

2019-07-09 08:23:07

數據安全旅游網絡安全

2010-03-15 12:50:19

Python文件夾創建

2018-06-28 15:58:04

PDF

2025-10-09 02:20:00

點贊
收藏

51CTO技術棧公眾號

亚洲精品乱码久久久久久9色| 欧美一级片免费| 欧美www.| 国产福利电影一区二区三区| 欧美韩日一区二区| 中文字幕第3页| 国精产品一区一区三区mba下载| 亚洲欧美日韩精品一区二区 | 成人在线观看小视频| 久久精品三级| 日韩欧美激情四射| 中文字幕在线亚洲三区| 99久久精品免费看国产交换| 亚洲经典三级| 亚洲欧美日韩第一区| 中文字幕第50页| 日本国产在线| 久久99久久精品| 国内偷自视频区视频综合| 国产免费一区二区三区网站免费| 国产一区二区三区免费在线| 日韩黄色在线观看| 日本高清无吗v一区| 久久久久欧美| 奇米影视第四色777| 欧美好骚综合网| 欧美mv日韩mv| 999精品视频在线| 日韩三级免费| 国产精品视频看| 亚洲精品网站在线播放gif| 精品偷拍各种wc美女嘘嘘| 欧美精品久久久久久久久25p| 动漫一区二区| 国产精品入口麻豆九色| 7777精品久久久大香线蕉小说| 少妇高潮av久久久久久| 欧洲亚洲精品久久久久| www.成人网.com| 国产成人亚洲精品| 免费在线观看黄网站| 亚洲最大黄网| 中国人与牲禽动交精品| 亚洲蜜桃精久久久久久久久久久久| 欧美日韩视频网站| 欧美日韩在线视频一区二区| 黄色一级片国产| 888av在线| 你懂的亚洲视频| 亚洲欧美精品中文字幕在线| 制服丝袜第一页在线观看| 精品国产乱码一区二区三区| 欧美挠脚心视频网站| 99久久激情视频| 345成人影院| 欧美高清一级片在线观看| 久久99精品久久久久久青青日本| 中文字幕免费播放| 国产精品一卡| 久久久久久高潮国产精品视| 欧美极品aaaaabbbbb| 午夜日韩视频| 欧美激情一区二区三区久久久| 精品人妻一区二区三区四区| 超碰国产一区| 亚洲观看高清完整版在线观看| 91免费国产精品| 成人在线免费在线观看| 人妻互换一区二区激情偷拍| 精品日韩毛片| 国产亚洲精品成人av久久ww| 精品无码av一区二区三区| 亚洲国产中文在线| 亚洲精品在线免费观看视频| 亚洲av成人精品一区二区三区| 成人性生交大片免费看中文视频| 亚洲国产va精品久久久不卡综合| 久草视频这里只有精品| 乱馆动漫1~6集在线观看| 丁香五六月婷婷久久激情| 日本在线视频www| 精品久久在线| 在线播放中文字幕一区| 先锋资源在线视频| 日本三级久久| 中文字幕在线视频日韩| 杨钰莹一级淫片aaaaaa播放| 136国产福利精品导航网址| 欧美做爰性生交视频| 老熟妇仑乱一区二区av| 美女免费视频一区二区| av蓝导航精品导航| 欧美高清电影在线| 久久精品免视看| 99精品视频网站| 精品人妻少妇嫩草av无码专区| 懂色av一区二区三区蜜臀| 精品视频导航| 免费黄色网址在线观看| 亚洲成人激情自拍| www.日本少妇| 麻豆久久久久| 亚洲国产精品久久久久久| 在线免费观看视频| 亚洲性视频h| 国产精品久久久久久网站| 羞羞色院91蜜桃| 成人av在线网站| 亚洲一区高清| 182在线视频观看| 开心激情综合| 欧美少妇一区二区| 久久久久久久久久一区| 四虎影视精品| 欧美日本高清一区| 神马久久久久久久| 福利一区二区在线观看| 亚洲乱码一区二区三区| 日韩欧美一中文字暮专区| 欧美精品在线观看一区二区| 五月婷婷综合在线观看| 欧美女人交a| 国产深夜精品福利| 黄色毛片在线看| 亚洲精品国产精品乱码不99| 国产一区二区三区免费不卡| 九色网友自拍视频手机在线| 日韩一区在线看| 伊人情人网综合| 韩国久久久久久| 亚洲的天堂在线中文字幕| 182在线观看视频| 蜜桃视频一区| 91在线高清免费观看| 精品亚洲综合| 欧美日韩国产综合新一区 | 91嫩草在线| 日本中文字幕电影在线免费观看| 午夜视频在线观看一区| 日韩在线一区视频| 久久精品高清| 国产精品一区二区性色av| 天天射天天色天天干| 亚洲综合色视频| 中文字幕1区2区| 亚洲成人激情社区| 精品亚洲一区二区三区在线播放 | 熟妇女人妻丰满少妇中文字幕| 无码人妻精品一区二区三区蜜桃91 | 伊人婷婷久久| 国产精品麻豆成人av电影艾秋| 日韩风俗一区 二区| 国产成人亚洲精品自产在线 | 高跟丝袜一区二区三区| 国模无码视频一区| 日韩网站在线| 久久精品99| a√中文在线观看| 亚洲高清一二三区| 日韩免费一级片| 97精品视频在线观看自产线路二| 成人在线视频一区二区三区| 日韩一级视频| 久久亚洲综合国产精品99麻豆精品福利| 国产一级一级国产| 国产人久久人人人人爽| 国产超级av在线| 一区二区三区四区在线看 | 美女毛片在线看| 日本福利一区二区| 波多野吉衣中文字幕| 日本欧美加勒比视频| 中国人体摄影一区二区三区| 日韩毛片网站| 欧美黑人性生活视频| 你懂的网站在线| 天天综合天天做天天综合| www.激情网| 成人综合日日夜夜| 欧美激情在线播放| 九色在线免费| 欧美一区二区三区思思人| 欧美黑人精品一区二区不卡| 成人av电影在线播放| 国产青青在线视频| 欧洲福利电影| 91超碰在线免费观看| 欧美激情护士| 日韩在线www| 亚洲va久久久噜噜噜久久天堂| 波多野结衣一区二区三区在线| 国产精品你懂的在线欣赏| 人妻换人妻仑乱| 国产欧美日韩亚洲一区二区三区| 先锋影音网一区| 中文字幕日本一区| 亚洲欧美日韩久久久久久| 亚洲乱码国产乱码精品| 国产精品美女一区二区在线观看| 欧美日韩一区二区区| 亚洲三级电影在线观看| 亚洲第一在线综合在线| 国内视频在线精品| 成人国产精品免费视频| 蜜桃视频在线观看播放| 伦理中文字幕亚洲| 亚洲av片在线观看| 色婷婷激情一区二区三区| 丁香花五月激情| 成人国产精品视频| 九九热免费在线观看| 色婷婷久久久| 成人精品久久av网站| 忘忧草在线日韩www影院| 亚洲无av在线中文字幕| 成人毛片在线免费观看| 欧美日韩在线播| 国产一卡二卡在线| 精品午夜一区二区三区在线观看| 久久福利一区二区| 欧美色爱综合| 国产精品一区二区a| 黄色日韩网站| 欧美在线视频网站| 91九色美女在线视频| 中文字幕亚洲欧美日韩2019| 午夜激情小视频| 日韩精品中午字幕| 国产特级黄色片| 在线观看www91| 中文字幕激情小说| 亚洲午夜在线视频| 美国黄色小视频| 中文字幕一区二区三区在线播放| 欧美日韩一区二区区别是什么 | 91精品国产乱码久久久竹菊| 欧美中文在线观看| 黄色软件视频在线观看| 国产精品毛片aⅴ一区二区三区| 欧美裸体男粗大视频在线观看| 香蕉av在线播放| 精品剧情在线观看| 国产尤物在线观看| 欧美日韩一区成人| 中文在线字幕av| 欧美在线影院一区二区| 日韩在线观看第一页| 一区二区三区鲁丝不卡| 午夜免费激情视频| 亚洲欧美电影院| 欧美国产在线看| 亚洲国产精品视频| 欧美成人免费看| 亚洲综合色自拍一区| 久久精品国产亚洲av麻豆色欲 | 久久毛片亚洲| 日本欧美黄网站| 成人免费网站www网站高清| 国产成人高潮免费观看精品| 亚洲高清黄色| 国产精品一区av| 久久69成人| 国产日产欧美a一级在线| 欧美国产视频| 91国产在线免费观看| 一区二区三区国产好| 91探花福利精品国产自产在线| 国产精品一区三区在线观看| 亚洲一区二区三区在线视频 | 欧美色网站导航| 在线免费观看高清视频| 91精品一区二区三区在线观看| 精品国产亚洲一区二区麻豆| 精品国产电影一区二区| 男女污视频在线观看| 色小说视频一区| 久色国产在线| 日本久久久久久| 国产精品视频一区二区三区| 亚洲最大福利视频网站| 超碰cao国产精品一区二区| 国产成人av一区二区三区| 精品国产第一国产综合精品| 国内精品久久久久久久果冻传媒| 国产成人三级| 中国女人做爰视频| 成人va天堂| 国产精品视频永久免费播放| 国产高清精品二区| 成人观看高清在线观看免费| 美女主播精品视频一二三四| 亚洲高清不卡一区| 欧美激情视频一区二区三区在线播放| 日本男女交配视频| 欧美aⅴ一区二区三区视频| 999在线精品视频| av激情亚洲男人天堂| 91av手机在线| 精品久久久在线观看| 在线免费观看一区二区| 精品区一区二区| 亚洲1卡2卡3卡4卡乱码精品| 美腿丝袜亚洲色图| 日本日本精品二区免费| 欧洲激情综合| 精品久久久久久无码中文野结衣| 99综合精品| 久久人人爽人人片| 国产夜色精品一区二区av| 久久久久久av无码免费网站| 五月婷婷欧美视频| 国产又粗又猛视频| 精品国产乱码91久久久久久网站| 欧美三级黄网| 国产综合在线看| 精品视频91| 无码免费一区二区三区免费播放| 天天天综合网| 麻豆三级在线观看| 91社区在线播放| 蜜桃视频无码区在线观看| 久久免费的精品国产v∧| 久久网一区二区| 欧美精品粉嫩高潮一区二区| 欧美日本韩国一区二区| 精品精品国产国产自在线| 日本韩国欧美| 久久99精品国产99久久| 亚洲小说区图片区| 男人女人拔萝卜视频| 亚洲天堂成人在线观看| 中文字字幕在线观看| 亚洲免费成人av电影| 麻豆av在线播放| 国产99在线免费| 韩日精品视频| 老熟女高潮一区二区三区| 亚洲欧洲在线观看av| 一区二区三区日| 色噜噜久久综合伊人一本| 午夜精品久久久久久久久久蜜桃| 国产精品三区四区| 欧美日韩福利| 无码人妻一区二区三区精品视频| 亚洲精品欧美激情| 国产欧美一区二区三区视频在线观看| 中文字幕视频在线免费欧美日韩综合在线看 | 激情视频亚洲| 9999在线观看| 麻豆精品在线观看| 久久精品在线观看视频| 亚洲国产精品嫩草影院| 成人免费一级视频| 亚洲色在线视频| 日韩不卡视频在线观看| 欧美午夜精品久久久久免费视| 久久一二三四| 精品人妻互换一区二区三区| 日本久久精品电影| 超碰免费在线| 国产区亚洲区欧美区| 在线一区电影| 丰满人妻一区二区三区53视频| 一区二区三区成人| 日日夜夜精品免费| 欧美中文字幕视频在线观看| 狠狠色狠狠色综合婷婷tag| 欧美不卡在线播放| 久久免费精品国产久精品久久久久| 男人天堂视频网| 亚洲人成在线电影| 久久久人成影片一区二区三区在哪下载 | 日产精品久久久久久久| 亚洲国产精品悠悠久久琪琪| 在线观看v片| 亚洲一区三区电影在线观看| 国内精品第一页| 日韩精品视频播放| 中文字幕无线精品亚洲乱码一区| 国产精品一区二区精品视频观看 | 亚洲丝袜精品| 韩国成人一区| 亚洲专区一区二区三区| wwwww黄色| 精品动漫一区二区三区在线观看| 九九精品调教| 婷婷精品国产一区二区三区日韩| 老牛影视一区二区三区| 农村黄色一级片| 亚洲欧美国产视频| 国产一区二区三区黄网站| 欧美爱爱视频免费看| 99久久综合99久久综合网站| 一区二区乱子伦在线播放| 欧美黑人性生活视频| 成人羞羞网站入口免费| 红桃视频一区二区三区免费| 欧美日韩久久久久| 爆操欧美美女| 日韩在线电影一区|