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

公司系統太多,能不能實現賬號互通?

開發 前端
session 主要以 cookie 或 URL 重寫為基礎的來實現的,默認使用 cookie 來實現,系統會創造一個名為 JSESSIONID 的變量輸出到 cookie 中。

背景

最近開發新產品,然后老板說我們現在系統太多了,每次切換系統登錄太麻煩了,能不能做個優化,同一賬號互通掉。作為一個資深架構獅,老板的要求肯定要滿足,安排!

一個公司產品矩陣比較豐富的時候,用戶在不同系統之間來回切換,固然對產品用戶體驗上較差,并且增加用戶密碼管理成本。

也沒有很好地利用內部流量進行用戶打通,并且每個產品的獨立體系會導致產品安全度下降。

因此實現集團產品的單點登錄對用戶使用體驗以及效率提升有很大的幫助。那么如何實現統一認證呢?我們先了解一下傳統的身份驗證方式。

傳統 Session 機制及身份認證方案

Cookie 與服務器的交互

圖片

眾所周知,http 是無狀態的協議,因此客戶每次通過瀏覽器訪問 web。

頁面,請求到服務端時,服務器都會新建線程,打開新的會話,而且服務器也不會自動維護客戶的上下文信息。

比如我們現在要實現一個電商內的購物車功能,要怎么才能知道哪些購物車請求對應的是來自同一個客戶的請求呢?

圖片

因此出現了 session 這個概念,session 就是一種保存上下文信息的機制,他是面向用戶的,每一個 SessionID 對應著一個用戶,并且保存在服務端中。

session 主要以 cookie 或 URL 重寫為基礎的來實現的,默認使用 cookie 來實現,系統會創造一個名為 JSESSIONID 的變量輸出到 cookie 中。

JSESSIONID 是存儲于瀏覽器內存中的,并不是寫到硬盤上的,如果我們把瀏覽器的cookie 禁止,則 web 服務器會采用 URL 重寫的方式傳遞 Sessionid,我們就可以在地址欄看到 sessinotallow=KWJHUG6JJM65HS2K6 之類的字符串。

通常 JSESSIONID 是不能跨窗口使用的,當你新開了一個瀏覽器窗口進入相同頁面時,系統會賦予你一個新的 sessionid,這樣我們信息共享的目的就達不到了。

服務器端的 session 的機制

當服務端收到客戶端的請求時候,首先判斷請求里是否包含了 JSESSIONID 的 sessionId,如果存在說明已經創建過了,直接從內存中拿出來使用,如果查詢不到,說明是無效的。

如果客戶請求不包含 sessionid,則為此客戶創建一個 session 并且生成一個與此 session 相關聯的 sessionid,這個 sessionid 將在本次響應中返回給客戶端保存。

對每次 http 請求,都經歷以下步驟處理:

  • 服務端首先查找對應的 cookie 的值(sessionid)。
  • 根據 sessionid,從服務器端 session 存儲中獲取對應 id 的 session 數據,進行返回。
  • 如果找不到 sessionid,服務器端就創建 session,生成 sessionid 對應的 cookie,寫入到響應頭中。

session 是由服務端生成的,并且以散列表的形式保存在內存中。

基于 session 的身份認證流程

基于 seesion 的身份認證主要流程如下:

圖片圖片

因為 http 請求是無狀態請求,所以在 Web 領域,大部分都是通過這種方式解決。但是這么做有什么問題呢?我們接著看。

集群環境下的 Session 困境及解決方案

隨著技術的發展,用戶流量增大,單個服務器已經不能滿足系統的需要了,分布式架構開始流行。

圖片圖片

通常都會把系統部署在多臺服務器上,通過負載均衡把請求分發到其中的一臺服務器上,這樣很可能同一個用戶的請求被分發到不同的服務器上。

因為 session 是保存在服務器上的,那么很有可能第一次請求訪問的 A 服務器,創建了 session,但是第二次訪問到了 B 服務器,這時就會出現取不到 session 的情況。

我們知道,Session 一般是用來存會話全局的用戶信息(不僅僅是登陸方面的問題),用來簡化/加速后續的業務請求。

傳統的 session 由服務器端生成并存儲,當應用進行分布式集群部署的時候,如何保證不同服務器上 session 信息能夠共享呢?

Session 共享方案

Session 共享一般有兩種思路:

  • session 復制
  • session 集中存儲

①session 復制

session 復制即將不同服務器上 session 數據進行復制,用戶登錄,修改,注銷時,將 session 信息同時也復制到其他機器上面去。

圖片圖片

這種實現的問題就是實現成本高,維護難度大,并且會存在延遲登問題。

②session 集中存儲

圖片圖片

集中存儲就是將獲取 session 單獨放在一個服務中進行存儲,所有獲取 session 的統一來這個服務中去取。

這樣就避免了同步和維護多套 session 的問題。一般我們都是使用 redis 進行集中式存儲 session。

多服務下的登陸困境及 SSO 方案

SSO 的產生背景

圖片圖片

如果企業做大了之后,一般都有很多的業務支持系統為其提供相應的管理和 IT 服務,按照傳統的驗證方式訪問多系統,每個單獨的系統都會有自己的安全體系和身份認證系統。

進入每個系統都需要進行登錄,獲取 session,再通過 session 訪問對應系統資源。

這樣的局面不僅給管理上帶來了很大的困難,對客戶來說也極不友好,那么如何讓客戶只需登陸一次,就可以進入多個系統,而不需要重新登錄呢?

圖片圖片

“單點登錄”就是專為解決此類問題的。其大致思想流程如下:通過一個 ticket 進行串接各系統間的用戶信息。

SSO 的底層原理 CAS

①CAS 實現單點登錄流程

我們知道對于完全不同域名的系統,cookie 是無法跨域名共享的,因此 sessionId 在頁面端也無法共享,因此需要實現單店登錄,就需要啟用一個專門用來登錄的域名如(ouath.com)來提供所有系統的 sessionId。

當業務系統被打開時,借助中心授權系統進行登錄,整體流程如下:

  • 當 b.com 打開時,發現自己未登陸,于是跳轉到 ouath.com 去登陸
  • ouath.com 登陸頁面被打開,用戶輸入帳戶/密碼登陸成功
  • ouath.com 登陸成功,種 cookie 到 ouath.com 域名下
  • 把 sessionid 放入后臺 redis,存放<ticket,sesssionid>數據結構,然后頁面重定向到 A 系統
  • 當 b.com 重新被打開,發現仍然是未登陸,但是有了一個 ticket 值
  • 當 b.com 用 ticket 值,到 redis 里查到 sessionid,并做 session 同步,然后種 cookie 給自己,頁面原地重定向
  • 當 b.com 打開自己頁面,此時有了 cookie,后臺校驗登陸狀態,成功

整個交互流程圖如下:

圖片圖片

②單點登錄流程演示

CAS 登錄服務 demo 核心代碼如下:

用戶實體類:

public class UserForm implements Serializable{
privatestaticfinallong serialVersionUID = 1L;

private String username;
private String password;
private String backurl;

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public String getBackurl() {
    return backurl;
}

public void setBackurl(String backurl) {
    this.backurl = backurl;
}

}

登錄控制器:

@Controller
publicclass IndexController {
    @Autowired
    private RedisTemplate redisTemplate;

@GetMapping("/toLogin")
public String toLogin(Model model,HttpServletRequest request) {
    Object userInfo = request.getSession().getAttribute(LoginFilter.USER_INFO);
    //不為空,則是已登陸狀態
    if (null != userInfo){
        String ticket = UUID.randomUUID().toString();
        redisTemplate.opsForValue().set(ticket,userInfo,2, TimeUnit.SECONDS);
        return"redirect:"+request.getParameter("url")+"?ticket="+ticket;
    }
    UserForm user = new UserForm();
    user.setUsername("laowang");
    user.setPassword("laowang");
    user.setBackurl(request.getParameter("url"));
    model.addAttribute("user", user);

    return"login";
}

@PostMapping("/login")
public void login(@ModelAttribute UserForm user,HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
    System.out.println("backurl:"+user.getBackurl());
    request.getSession().setAttribute(LoginFilter.USER_INFO,user);

    //登陸成功,創建用戶信息票據
    String ticket = UUID.randomUUID().toString();
    redisTemplate.opsForValue().set(ticket,user,20, TimeUnit.SECONDS);
    //重定向,回原url  ---a.com
    if (null == user.getBackurl() || user.getBackurl().length()==0){
        response.sendRedirect("/index");
    } else {
        response.sendRedirect(user.getBackurl()+"?ticket="+ticket);
    }
}

@GetMapping("/index")
public ModelAndView index(HttpServletRequest request) {
    ModelAndView modelAndView = new ModelAndView();
    Object user = request.getSession().getAttribute(LoginFilter.USER_INFO);
    UserForm userInfo = (UserForm) user;
    modelAndView.setViewName("index");
    modelAndView.addObject("user", userInfo);
    request.getSession().setAttribute("test","123");
    return modelAndView;
}
}

登錄過濾器:

public class LoginFilter implements Filter {
    publicstaticfinal String USER_INFO = "user";
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public void doFilter(ServletRequest servletRequest,
                     ServletResponse servletResponse, FilterChain filterChain)
        throws IOException, ServletException {

    HttpServletRequest request = (HttpServletRequest) servletRequest;
     HttpServletResponse response = (HttpServletResponse)servletResponse;

    Object userInfo = request.getSession().getAttribute(USER_INFO);;

    //如果未登陸,則拒絕請求,轉向登陸頁面
    String requestUrl = request.getServletPath();
    if (!"/toLogin".equals(requestUrl)//不是登陸頁面
            && !requestUrl.startsWith("/login")//不是去登陸
            && null == userInfo) {//不是登陸狀態

        request.getRequestDispatcher("/toLogin").forward(request,response);
        return ;
    }

    filterChain.doFilter(request,servletResponse);
}

@Override
public void destroy() {

}
}

配置過濾器:

@Configuration
publicclass LoginConfig {

//配置filter生效
@Bean
public FilterRegistrationBean sessionFilterRegistration() {

    FilterRegistrationBean registration = new FilterRegistrationBean();
    registration.setFilter(new LoginFilter());
    registration.addUrlPatterns("/*");
    registration.addInitParameter("paramName", "paramValue");
    registration.setName("sessionFilter");
    registration.setOrder(1);
    return registration;
}
}

登錄頁面:

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>enjoy login</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<div text-align="center">
    <h1>請登陸</h1>
    <form action="#" th:action="@{/login}" th:object="${user}" method="post">
        <p>用戶名: <input type="text" th:field="*{username}" /></p>
        <p>密  碼: <input type="text" th:field="*{password}" /></p>
        <p><input type="submit" value="Submit" /><input type="reset" value="Reset" /></p>
        <input type="text" th:field="*{backurl}" hidden="hidden" />
    </form>
</div>


</body>
</html>
web 系統 demo 核心代碼如下:

過濾器:

public class SSOFilter implements Filter {
    private RedisTemplate redisTemplate;

publicstaticfinal String USER_INFO = "user";

public SSOFilter(RedisTemplate redisTemplate){
    this.redisTemplate = redisTemplate;
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public void doFilter(ServletRequest servletRequest,
                     ServletResponse servletResponse, FilterChain filterChain)
        throws IOException, ServletException {

    HttpServletRequest request = (HttpServletRequest) servletRequest;
    HttpServletResponse response = (HttpServletResponse)servletResponse;

    Object userInfo = request.getSession().getAttribute(USER_INFO);;

    //如果未登陸,則拒絕請求,轉向登陸頁面
    String requestUrl = request.getServletPath();
    if (!"/toLogin".equals(requestUrl)//不是登陸頁面
            && !requestUrl.startsWith("/login")//不是去登陸
            && null == userInfo) {//不是登陸狀態

        String ticket = request.getParameter("ticket");
        //有票據,則使用票據去嘗試拿取用戶信息
        if (null != ticket){
            userInfo = redisTemplate.opsForValue().get(ticket);
        }
        //無法得到用戶信息,則去登陸頁面
        if (null == userInfo){
            response.sendRedirect("http://127.0.0.1:8080/toLogin?url="+request.getRequestURL().toString());
            return ;
        }

        /**
         * 將用戶信息,加載進session中
         */
        UserForm user = (UserForm) userInfo;
        request.getSession().setAttribute(SSOFilter.USER_INFO,user);
        redisTemplate.delete(ticket);
    }

    filterChain.doFilter(request,servletResponse);
}

@Override
public void destroy() {

}
}

控制器:

@Controller
publicclass IndexController {
    @Autowired
    private RedisTemplate redisTemplate;

@GetMapping("/index")
public ModelAndView index(HttpServletRequest request) {
    ModelAndView modelAndView = new ModelAndView();
    Object userInfo = request.getSession().getAttribute(SSOFilter.USER_INFO);
    UserForm user = (UserForm) userInfo;
    modelAndView.setViewName("index");
    modelAndView.addObject("user", user);

    request.getSession().setAttribute("test","123");
    return modelAndView;
}
}

首頁:

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>enjoy index</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<div th:object="${user}">
    <h1>cas-website:歡迎你"></h1>
</div>
</body>
</html>

③CAS 的單點登錄和 OAuth2 的區別

OAuth2:三方授權協議,允許用戶在不提供賬號密碼的情況下,通過信任的應用進行授權,使其客戶端可以訪問權限范圍內的資源。

CAS:中央認證服務(Central Authentication Service),一個基于 Kerberos 票據方式實現 SSO 單點登錄的框架,為 Web 應用系統提供一種可靠的單點登錄解決方法(屬于 Web SSO )。

CAS 的單點登錄時保障客戶端的用戶資源的安全 ;OAuth2 則是保障服務端的用戶資源的安全 。

CAS 客戶端要獲取的最終信息是,這個用戶到底有沒有權限訪問我(CAS 客戶端)的資源;OAuth2 獲取的最終信息是,我(oauth2 服務提供方)的用戶的資源到底能不能讓你(oauth2 的客戶端)訪問。

因此,需要統一的賬號密碼進行身份認證,用 CAS;需要授權第三方服務使用我方資源,使用 OAuth2。

責任編輯:武曉燕 來源: 碼猿技術專欄
相關推薦

2022-11-07 08:36:11

2021-06-15 11:33:48

監控微信聊天前端

2019-11-21 09:25:23

AI 數據人工智能

2021-05-08 11:32:42

監控信聊天

2016-05-19 17:10:27

銀行

2021-02-26 21:25:08

比特幣投資貨幣

2022-10-20 08:00:37

機器人ZadigChatOps

2020-10-16 18:33:18

Rust語言前端開發

2025-04-22 08:00:00

2013-04-19 10:42:02

打車軟件大數據

2023-04-06 06:55:24

ChatGPTGPT算力

2012-06-13 11:01:59

英特爾

2022-04-24 11:52:04

元宇宙Web3去中心化

2020-12-21 15:09:23

人工智能安全人臉識別

2023-12-27 08:03:53

Go優化代碼

2024-04-26 09:37:43

國產數據庫開發者

2010-04-13 10:02:16

索引

2011-12-06 10:06:33

云存儲

2022-12-09 08:22:26

Gradle編譯運行

2024-07-15 11:41:14

點贊
收藏

51CTO技術棧公眾號

欧美毛片在线观看| 一区二区三区四区高清精品免费观看 | 国产精品自拍偷拍视频| 奇米777在线| 高清国产福利在线观看| 国产在线一区不卡| 亚洲欧美视频| 日韩欧美另类在线| 日本在线高清视频一区| 午夜精品福利在线视频| 成人在线视频播放| 97精品久久久午夜一区二区三区| 日韩在线观看免费全| av动漫在线看| 日批免费在线观看| 国产综合欧美| 欧美日本在线一区| 日韩欧美第二区在线观看| 国产精品天天操| 欧美超碰在线| 欧美日韩日日摸| 黄色一级在线视频| 国模人体一区二区| 综合精品久久| 91精品国产全国免费观看| 亚洲一区二区三区欧美| 在线观看日韩一区二区| 欧美精选一区二区三区| 欧美在线不卡视频| 午夜精品美女久久久久av福利 | 欧美日韩一二三四五区| 国产精品久久久一区二区三区| 久久久久久久久毛片| 日本一区影院| 亚洲国产一区二区a毛片| 国产精品播放| 日本三级一区二区| 欧美精品中文| 日本电影亚洲天堂一区| 台湾成人av| 国产精品国产高清国产| 欧美亚洲三级| 久久免费精品日本久久中文字幕| av黄色一级片| 日韩欧美另类一区二区| 国产精品久久久一区麻豆最新章节| 国产激情综合五月久久| 欧美激情久久久久久久| 四虎视频在线精品免费网址| 亚洲人成在线观看一区二区| 97自拍视频| 日韩av一区二区在线播放| 人人香蕉久久| 亚洲精品在线网站| 国产亚洲综合视频| av大片在线看| 国产精品一区二区男女羞羞无遮挡| 九九精品在线视频| 无码人妻精品一区二区三区温州| 一区二区视频免费完整版观看| 亚洲成人777| 日韩在线电影一区| 国产黄色片在线观看| 国产亚洲精品超碰| 国产欧美va欧美va香蕉在| 国产偷人爽久久久久久老妇app | 国产精品日韩精品在线播放 | 亚洲最新在线观看| 久久精品二区| 91在线观看喷潮| 一区二区三区高清视频在线观看| 一区二区三区高清国产| 天堂av手机在线| 日本在线播放一二三区| 中文字幕亚洲视频| 国产在线久久久| 九九热国产视频| 亚洲美洲欧洲综合国产一区| 97超碰国产精品女人人人爽| av成人免费网站| 亚洲一区 二区 三区| 欧美激情视频在线| asian性开放少妇pics| **欧美日韩在线| 色婷婷av一区二区三区gif | 国产成人精品一区二三区| 国产精品久久久久毛片大屁完整版| 久久精品中文字幕| 日本xxxxxxxxx18| 日本精品在线播放| 亚洲成人a级网| 久久人人爽人人片| 欧美性生活一级片| 视频一区视频二区国产精品| av无码av天天av天天爽| 欧美日韩激情在线一区二区三区| www国产精品com| 欧美精品亚洲精品日韩精品| 激情久久久久| 美女精品久久久| 熟女少妇a性色生活片毛片| 日韩欧美天堂| 亚洲大胆人体av| 亚洲av无码国产精品麻豆天美| 亚洲不卡av不卡一区二区| 一区二区三区无码高清视频| 手机在线免费看毛片| 午夜综合激情| 97欧洲一区二区精品免费| 黄色免费在线播放| 91色九色蝌蚪| 国产精品久久亚洲7777| 国产在线一二三| 洋洋成人永久网站入口| 高清一区在线观看| 在线观看精品| 精品裸体舞一区二区三区| 一个人看的视频www| 精品一区视频| 欧美mv日韩mv| 国产精品无码无卡无需播放器| 亚洲第一黄色| 亚洲一区二区中文| 午夜精品久久久久久久99| 国产高清在线精品| 国产精品国产精品| 成人ww免费完整版在线观看| 亚洲欧美aⅴ...| 欧美一二三不卡| 91豆花视频在线播放| 天天综合日日夜夜精品| 亚洲国产精品久久久久爰色欲| 激情黄产视频在线免费观看| 一本大道久久a久久精品综合| 激情六月丁香婷婷| 国产精品自在线拍| 亚洲欧美中文日韩v在线观看| 91久久免费视频| 久久在线视频免费观看| 国产91成人video| 波多野结衣视频观看| 理论电影国产精品| 91久久精品国产91久久性色tv| 丁香在线视频| 色婷婷综合久久| 亚洲一级中文字幕| 久久久成人网| 91免费视频国产| 国产91久久久| 一区二区三区四区在线播放| 中文字幕亚洲影院| 高清精品视频| 久久久久久有精品国产| 成人午夜免费在线观看| 亚洲一区二区三区在线| avtt中文字幕| 久久99国产精一区二区三区| xvideos成人免费中文版| 中文字幕 人妻熟女| 国产亚洲成av人在线观看导航| 99久久久无码国产精品6| 国产精品手机在线播放| 成年无码av片在线| 欧美一级视频免费观看| 99久久国产综合色|国产精品| 777777av| 国产一区二区欧美| 国产精品一区二区久久国产| 日本蜜桃在线观看| 亚洲成a人v欧美综合天堂下载 | 石原莉奈在线亚洲三区| 91在线观看免费观看| 在线观看操人| 在线观看一区日韩| 免费黄色在线播放| 91久久久久| 成人有码在线视频| 欧洲亚洲精品视频| 一区二区三区欧美| 50一60岁老妇女毛片| 久久婷婷影院| 9999在线观看| 久久uomeier| 欧美成人性福生活免费看| 久久久久久久伊人| 国产精品自拍毛片| 青青青国产在线观看| 精品午夜久久| 99久久精品久久久久久ai换脸| 成人性爱视频在线观看| 一区二区三区不卡在线观看| 中文字幕在线播放视频| 欧美精品三区| 国产精品视频999| 亚洲欧洲国产综合| 欧美日本一区二区| 日本一级黄色录像| 中文字幕亚洲一区二区va在线| 日本黄色录像片| 久久精品国产一区二区三 | 日韩欧美国产综合一区| 91精品国产综合久久久蜜臀九色| 国产成人亚洲精品青草天美| 日本一本二本在线观看| 伊人久久大香线| 欧美极品色图| 性感女国产在线| 日韩av影院在线观看| 黄网站免费在线| 中文字幕成人网| 日本 片 成人 在线| 欧美一区二区三区高清视频| 亲子乱一区二区三区电影 | 国产亚洲精品美女| 色av性av丰满av| 国产亚洲人成网站| 中文字幕永久免费| 激情伊人五月天久久综合| 91手机视频在线| 最新亚洲精品| 国产伦精品一区二区三区免| 亚洲狼人在线| 国产精品久久久久久五月尺| 色在线视频观看| 欧美激情亚洲另类| gogogogo高清视频在线| 在线日韩精品视频| 国产综合在线观看| 国产视频精品va久久久久久| 福利网址在线观看| 国产免费久久精品| 天天综合网久久| 久久99伊人| 波多野结衣乳巨码无在线| 国产精品videosex极品| 免费看污污视频| 成人香蕉社区| 国产成人精品久久| 日韩伦理精品| 97色在线视频观看| av电影在线播放高清免费观看| 日韩电影第一页| 婷婷视频在线观看| 亚洲激情在线观看视频免费| 91麻豆精品在线| 一本大道久久a久久精二百| 精品人妻一区二区三区免费看| 午夜精品久久久久久久蜜桃app| 久草福利资源在线观看| 一二三区精品视频| 久久久无码一区二区三区| 91小视频在线| 亚洲精品中文字幕在线播放| 99久久精品一区二区| 亚洲少妇久久久| 日韩和欧美的一区| 国产精品波多野结衣| 欧美电影免费观看高清| 亚洲视频在线观看日本a| 99久久精品网| 美女黄毛**国产精品啪啪| 国产精品美女久久久久| 97人人做人人人难人人做| swag国产精品一区二区| 狠狠色噜噜狠狠色综合久| 国产亚洲精彩久久| 97久久伊人激情网| 亚洲涩涩在线| 国产精品视频大全| 四虎影视精品永久在线观看| 91久久久久久久久| 大型av综合网站| 欧美精品一区二区三区四区五区| 精品一级毛片| 国产一二三四五| 亚洲免费在线| 亚洲综合av在线播放| 国产人成精品一区二区三| 欧美激情国产精品日韩| 91综合久久| 激情五月六月婷婷| 国产视频亚洲| 人人干人人干人人| 风流少妇一区二区| 青娱乐精品在线| 91在线精品一区二区| 一级在线观看视频| 亚洲综合丁香婷婷六月香| 六月丁香激情综合| 欧美酷刑日本凌虐凌虐| 亚洲精品国产精品国自产网站按摩| 欧美日韩精品一区二区三区蜜桃| www.久久精品.com| 亚洲人成五月天| 性欧美videos高清hd4k| 精品国产一区av| 国产h片在线观看| 91精品久久久久久| 图片婷婷一区| 四虎4hu永久免费入口| 99久久婷婷这里只有精品| 久久久亚洲影院| 国产一二三在线| 91在线精品视频| 国产精品三级| 黄页免费在线观看视频| 久久99国产精品久久| 不卡av免费在线| 日本大胆欧美人术艺术动态| 亚洲乱码国产一区三区| 日韩经典中文字幕一区| 无码人妻丰满熟妇区毛片蜜桃精品 | 欧美激情 亚洲| 国产福利电影一区二区三区| 亚洲熟妇无码av| 亚洲一区二区三区视频在线播放| 黄色av一区二区| 亚洲精品成人久久电影| 少妇视频在线| 成人激情视频在线| 久久av综合| 337p粉嫩大胆噜噜噜鲁| 成熟亚洲日本毛茸茸凸凹| 中文字幕在线视频播放| 亚洲欧洲精品一区二区三区| 久久精品五月天| 日韩精品亚洲视频| 波多野结衣视频一区二区| 97中文在线观看| 欧美精品福利| 肉丝美足丝袜一区二区三区四| 亚洲图片激情小说| 亚洲在线精品视频| 中文字幕日韩精品在线| 黄色在线论坛| 欧美激情小视频| 日韩欧美一级| 加勒比海盗1在线观看免费国语版| 麻豆成人av在线| 在线小视频你懂的| 在线观看日韩国产| 国产一区二区三区福利| 日韩美女视频中文字幕| 欧美极品在线| 午夜精品亚洲一区二区三区嫩草 | 人妻丰满熟妇av无码久久洗澡 | 日本日本19xxxⅹhd乱影响| 99热这里都是精品| 成人毛片18女人毛片| 日韩精品在线观看网站| jk漫画禁漫成人入口| 欧美人xxxxx| 日本中文字幕一区二区有限公司| 色欲AV无码精品一区二区久久| 国产精品不卡在线| 91精品国产乱码久久| 北条麻妃久久精品| 国产一区2区在线观看| 99视频精品全部免费看| 成人激情校园春色| 美女网站视频色| 一区二区久久久| 日韩一级中文字幕| www.亚洲男人天堂| 秋霞影院一区| 日韩av综合在线观看| 国产偷国产偷精品高清尤物| 在线观看你懂的网站| 日韩中文视频免费在线观看| 性欧美video另类hd尤物| 妞干网这里只有精品| 国产福利精品导航| 欧美一区二区三区四| 一区二区三区黄色| 久久爱www.| 777精品久无码人妻蜜桃| 国产视频一区在线播放| 国产精品玖玖玖| 国内精品小视频在线观看| 国产成人ay| www.污污视频| 五月婷婷激情综合网| 国产免费a∨片在线观看不卡| 成人精品福利视频| 亚洲国产第一| 久久视频一区二区三区| 欧美午夜片欧美片在线观看| 亚洲成人第一区| 久久成人这里只有精品| 国产精品网在线观看| 亚洲一区二区三区四区五区xx| 亚洲日本va午夜在线影院| 日韩大胆人体| 91在线免费观看网站| 久久人人超碰| 18精品爽视频在线观看| 一区二区在线视频| 激情小说亚洲图片| 黄页网站在线观看视频| 国产麻豆一精品一av一免费|