亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

Spring Session整合Redis與Spring Security,實(shí)現(xiàn)分布式會(huì)話共享實(shí)戰(zhàn)

Spring Session整合Redis與Spring Security,實(shí)現(xiàn)分布式會(huì)話共享實(shí)戰(zhàn) Spring Session、Spring Security 和 Redis 這套組合拳是分布式場(chǎng)景下繞不開的標(biāo)配。很多團(tuán)隊(duì)做到集群部署這一步第一道坎就是登錄狀態(tài)失效明明在 A 服務(wù)器登錄了請(qǐng)求一打到 B 服務(wù)器就被踢回登錄頁(yè)。解決思路很多主流方案就是讓 Session 不再躺在各自的 Tomcat 內(nèi)存里而是統(tǒng)一丟到 Redis配合 Spring Security 做認(rèn)證授權(quán)再把會(huì)話數(shù)據(jù)無(wú)狀態(tài)化地共享出去。這篇文章我把自己的經(jīng)驗(yàn)梳理一遍從依賴引入開始到配置類和過濾器鏈的整合原理再到實(shí)際跑通驗(yàn)證最后把 Redis 里存的到底是什么、序列化方案怎么選這類細(xì)節(jié)也講透。這次就用最簡(jiǎn)單直白的方式呈現(xiàn)適合剛接觸會(huì)話共享、卡在 Spring Security 和 Redis 整合這一步的 Java 后端開發(fā)者看完可以直接抄作業(yè)也搞清楚背后每條配置的取舍邏輯。1. 整合前必須想明白的三個(gè)問題1.1 不做會(huì)話共享分布式部署會(huì)踩什么坑得先理解問題本身。傳統(tǒng)單機(jī)部署時(shí)用戶登錄之后服務(wù)器把 Session 保存在自己的內(nèi)存里再通過 Cookie 里的 JSESSIONID 與用戶一一對(duì)應(yīng)。同一個(gè)瀏覽器始終訪問同一臺(tái)服務(wù)器一切都很和諧。但一旦上 Nginx 做負(fù)載均衡流量被分發(fā)到多個(gè)節(jié)點(diǎn)問題就來了。用戶第一次請(qǐng)求落在節(jié)點(diǎn) ASession 也建在節(jié)點(diǎn) A下一次請(qǐng)求被 Nginx 轉(zhuǎn)發(fā)到節(jié)點(diǎn) B節(jié)點(diǎn) B 的內(nèi)存里根本沒有這個(gè) Session于是被判定為未登錄。這就是經(jīng)典的 Session 不一致問題很多人第一次遇到時(shí)以為是 Security 配置寫錯(cuò)了折騰半天才發(fā)現(xiàn)是會(huì)話存儲(chǔ)的位置出了問題。解決方案無(wú)非三種Nginx 配置 IP Hash讓同一個(gè) IP 固定打到同一臺(tái)節(jié)點(diǎn)治標(biāo)不治本移動(dòng)網(wǎng)絡(luò)下 IP 變化照樣失效節(jié)點(diǎn)宕機(jī)遷移時(shí)也照樣丟狀態(tài)。Tomcat 集群會(huì)話復(fù)制節(jié)點(diǎn)之間同步 Session實(shí)現(xiàn)簡(jiǎn)單但廣播風(fēng)暴嚴(yán)重節(jié)點(diǎn)一多性能雪崩。把 Session 集中存到 Redis所有節(jié)點(diǎn)共用同一個(gè)存儲(chǔ)層這是目前最主流、最推薦的做法也是 Spring Session 的核心價(jià)值所在。1.2 Spring Session 在這套架構(gòu)里扮演什么角色Spring Session 不是一個(gè)獨(dú)立運(yùn)行的中間件它本質(zhì)上是 Servlet 容器與 Redis 之間的一層橋接。它通過一個(gè) Filter 攔截所有請(qǐng)求把原本由 Tomcat 管理的 HttpSession 替換成 RedisSession底層讀寫全部走 Redis對(duì)業(yè)務(wù)代碼完全透明。這層替換的核心動(dòng)作有兩個(gè)請(qǐng)求進(jìn)來時(shí)從 Cookie 讀出 SessionId拿這個(gè) Key 去 Redis 查數(shù)據(jù)查到就恢復(fù)成完整的 Session 對(duì)象。響應(yīng)返回時(shí)把 Session 的變化寫回 Redis同時(shí)更新過期時(shí)間并把 SessionId 通過 Cookie 返回給瀏覽器。整個(gè)過程對(duì)應(yīng)用無(wú)感知業(yè)務(wù)代碼里 request.getSession() 拿到的是同一個(gè)接口但背后存儲(chǔ)已經(jīng)從本地內(nèi)存切換到了 Redis。這就是 Spring Session 的獨(dú)特價(jià)值不需要改業(yè)務(wù)代碼只需要引入依賴和配置就完成了會(huì)話存儲(chǔ)的搬遷。1.3 Spring Security 與 Session 到底誰(shuí)依賴誰(shuí)這個(gè)點(diǎn)很多人其實(shí)沒理清。Spring Security 本身并不一定需要 Session它基于過濾器鏈做認(rèn)證和授權(quán)但框架默認(rèn)會(huì)把認(rèn)證成功的 SecurityContext 存進(jìn) Session通過 session id 在后續(xù)請(qǐng)求中恢復(fù)上下文。具體來看SecurityContextPersistenceFilter 這個(gè)過濾器負(fù)責(zé)在請(qǐng)求開始時(shí)從 Session 中取出 SecurityContext放到 ThreadLocal 里請(qǐng)求結(jié)束后再把 ThreadLocal 里的 SecurityContext 寫回 Session。如果 Session 存到 Redis那么這個(gè)讀寫操作的存儲(chǔ)介質(zhì)也就自然變成了 Redis。所以整合邏輯就通了Spring Security 負(fù)責(zé)認(rèn)證Spring Session 負(fù)責(zé)把認(rèn)證結(jié)果存到 RedisRedis 是整個(gè)會(huì)話數(shù)據(jù)的統(tǒng)一載體。三者的關(guān)系不是堆疊而是各司其職的協(xié)作。2. 依賴引入與基礎(chǔ)配置2.1 Maven 依賴清單用 Spring Boot 的話整合工作極大簡(jiǎn)化我用的版本是 Spring Boot 2.7.x依賴如下dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-security/artifactId /dependency dependency groupIdorg.springframework.session/groupId artifactIdspring-session-data-redis/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis/artifactId /dependency dependency groupIdorg.apache.commons/groupId artifactIdcommons-pool2/artifactId /dependency /dependencies這幾個(gè)依賴要注意幾點(diǎn)spring-session-data-redis 是核心負(fù)責(zé)把 Session 存儲(chǔ)到 Redis。spring-boot-starter-data-redis 提供 Redis 連接管理兩者需要同時(shí)引入。commons-pool2 是 Lettuce 連接池所需不加的話如果配置了連接池參數(shù)會(huì)啟動(dòng)報(bào)錯(cuò)。Spring Boot 3.x 的用法有差異Spring Security 配置改用 Lambda DSLSpring Session 也需要額外引入 spring-session-core這里不展開我用 2.7.x 做演示生產(chǎn)項(xiàng)目用 3.x 的可以參照官方遷移文檔做適配。2.2 YAML 配置里最容易忽略的細(xì)節(jié)配置文件和普通 Redis 項(xiàng)目沒有太大區(qū)別重點(diǎn)是幾個(gè)容易被忽略的參數(shù)spring: redis: host: 127.0.0.1 port: 6379 password: database: 0 timeout: 5s lettuce: pool: max-active: 8 max-idle: 8 min-idle: 0 max-wait: -1ms session: store-type: redis timeout: 30mspring.session.store-typeredis 是核心開關(guān)告訴 Spring Boot 使用 Redis 作為 Session 存儲(chǔ)同時(shí)自動(dòng)配置 SessionRepositoryFilter。spring.session.timeout30m 是 Session 過期時(shí)間注意它和 server.servlet.session.timeout 的優(yōu)先級(jí)關(guān)系。兩者都存在時(shí)spring.session.timeout 優(yōu)先生效。如果沒配置默認(rèn)是 30 分鐘。Redis 的 database 必須統(tǒng)一。如果同一個(gè) Redis 實(shí)例被多個(gè)項(xiàng)目共用建議給不同項(xiàng)目分不同 database或者用不同 key 前綴區(qū)分。Spring Session 默認(rèn)的 key 前綴是 spring:session多個(gè)項(xiàng)目共用一個(gè) Redis 時(shí)需要覆蓋默認(rèn)的 RedisIndexedSessionRepository 或 RedisSessionRepository 的 key 命名規(guī)則否則不同項(xiàng)目的 Session 會(huì)互相污染。2.3 Redis 連接配置的三個(gè)參數(shù)心得host 和 port 沒什么好說的有幾個(gè)參數(shù)是生產(chǎn)環(huán)境必須考慮的timeout 建議設(shè)置 3-5 秒避免 Redis 阻塞時(shí)線程無(wú)限等待拖垮整個(gè)應(yīng)用。lettuce.pool.max-active 控制連接池最大連接數(shù)默認(rèn) 8壓測(cè)時(shí)如果發(fā)現(xiàn)連接不夠可以通過 Redis 的 INFO clients 命令查看實(shí)際連接情況再調(diào)整。max-wait 不建議設(shè)成 -1無(wú)限等待改成 3000ms 左右的有限等待Redis 抖動(dòng)時(shí)不會(huì)把線程全部耗盡。很多初學(xué)者踩過的坑是只寫了 host 和 port連接池參數(shù)完全沒配一旦業(yè)務(wù)流量上來Lettuce 的默認(rèn)連接數(shù)不夠用日志里出現(xiàn) connection pool exhausted 的異常。這個(gè)問題不致命但排查起來比較費(fèi)勁。3. Spring Security 配置核心類3.1 安全配置類的寫法引入依賴之后Spring Boot 會(huì)自動(dòng)生成一個(gè)默認(rèn)的 Security 配置會(huì)彈出一個(gè)默認(rèn)的登錄頁(yè)并且默認(rèn)用戶名是 user。我們要替換成自己的配置類Configuration EnableWebSecurity public class SecurityConfig { Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth - auth .antMatchers(/login, /logout, /public/**).permitAll() .antMatchers(/admin/**).hasRole(ADMIN) .anyRequest().authenticated() ) .formLogin(form - form .loginPage(/login) .loginProcessingUrl(/login) .defaultSuccessUrl(/index, true) .permitAll() ) .logout(logout - logout .logoutUrl(/logout) .deleteCookies(JSESSIONID) .invalidateHttpSession(true) ) .csrf(csrf - csrf.disable()) .sessionManagement(session - session .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) .maximumSessions(5) .maxSessionsPreventsLogin(false) ); return http.build(); } }幾個(gè)關(guān)鍵點(diǎn)usernameParameter 和 passwordParameter 默認(rèn)是 username 和 password如果登錄請(qǐng)求參數(shù)名不一樣需要在 formLogin 配置里指定。loginPage 指定的是自定義登錄頁(yè)如果項(xiàng)目里有對(duì)應(yīng)的頁(yè)面就填頁(yè)面路徑?jīng)]有的話可以用 /login 讓 Spring Security 渲染默認(rèn)頁(yè)面。csrf.disable() 這個(gè)操作我平時(shí)只在開發(fā)環(huán)境或者純 API 接口項(xiàng)目里做有頁(yè)面交互的項(xiàng)目強(qiáng)烈建議保留 CSRF 防護(hù)具體原因后面單獨(dú)說。maximumSessions(5) 表示同一個(gè)用戶最多允許 5 個(gè)會(huì)話同時(shí)在線超過時(shí)舊會(huì)話會(huì)被踢下線這個(gè)參數(shù)要結(jié)合業(yè)務(wù)場(chǎng)景考慮太嚴(yán)會(huì)影響正常多端登錄。3.2 UserDetailsService 的用戶加載邏輯默認(rèn)配置是使用內(nèi)存用戶真實(shí)項(xiàng)目必須換成數(shù)據(jù)庫(kù)或其他存儲(chǔ)。最直接的方式是實(shí)現(xiàn) UserDetailsServiceService public class UserDetailsServiceImpl implements UserDetailsService { Autowired private UserMapper userMapper; Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { UserDO user userMapper.findByUsername(username); if (user null) { throw new UsernameNotFoundException(用戶不存在); } return org.springframework.security.core.userdetails.User .builder() .username(user.getUsername()) .password(user.getPassword()) .roles(ADMIN, USER) .build(); } }這里有一個(gè)常見困惑為什么登錄時(shí)只是傳了用戶名和密碼最后卻要把完整的權(quán)限和角色都交給 Security因?yàn)檎J(rèn)證成功后SecurityContext 里保存的就是這個(gè) UserDetails 對(duì)象后續(xù)每次請(qǐng)求從 Session 恢復(fù)出來的也是它。如果角色在這里面缺失后面做方法級(jí)權(quán)限校驗(yàn)PreAuthorize就會(huì)直接失敗。還有一個(gè)細(xì)節(jié)PasswordEncoder 必須和數(shù)據(jù)庫(kù)里的密碼加密方式一致。如果數(shù)據(jù)庫(kù)里存的是 BCrypt 加密的密文那么 PasswordEncoder 必須對(duì)應(yīng)配置Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); }如果密碼是明文存的可以臨時(shí)用 NoOpPasswordEncoder但生產(chǎn)環(huán)境千萬(wàn)不要這樣做明文密碼在任何正規(guī)項(xiàng)目里都是紅線。3.3 SecurityContext 是怎么進(jìn)到 Session 的這塊講透的話后面排查問題會(huì)少走很多彎路。用戶提交登錄請(qǐng)求后UsernamePasswordAuthenticationFilter 攔截到請(qǐng)求調(diào)用 AuthenticationManager 做認(rèn)證認(rèn)證成功后拿著 Authentication 對(duì)象創(chuàng)建一個(gè) SecurityContext然后把它塞進(jìn) HttpSession 里。這個(gè)塞入動(dòng)作發(fā)生在 SecurityContextPersistenceFilter 的最后階段。每個(gè)請(qǐng)求進(jìn)來時(shí)它會(huì)先檢查當(dāng)前 Session 里有沒有 SecurityContext有就恢復(fù)到當(dāng)前線程請(qǐng)求結(jié)束時(shí)如果 SecurityContext 變化了就再寫回 Session。所以答案很清晰Spring Security 不直接操作 Redis它操作的是 HttpSession 這個(gè)抽象層Spring Session 把這個(gè)抽象層搬到了 Redis。這也解釋了為什么 Spring Security 配置本身和 Redis 沒有直接整合關(guān)系整合的關(guān)鍵在中間層。4. Spring Session 的工作機(jī)制與 Redis 底層數(shù)據(jù)4.1 SessionRepositoryFilter 過濾器如何接管會(huì)話Spring Session 的核心是一個(gè)名叫 SessionRepositoryFilter 的過濾器它的優(yōu)先級(jí)最高在 Spring Security 的過濾器鏈之前執(zhí)行。它的工作流程請(qǐng)求進(jìn)來時(shí)包裝原始的 HttpServletRequest把 getSession() 方法的實(shí)現(xiàn)替換為從 RedisSessionRepository 讀取 Session。請(qǐng)求放行給下游過濾器包括 Spring Security 的過濾器鏈處理。請(qǐng)求結(jié)束后將 Session 的變更同步到 Redis同時(shí)寫 Cookie 響應(yīng)給瀏覽器。這個(gè)過濾器的優(yōu)先級(jí)決定了它不能被隨意替換或跳過。如果項(xiàng)目里自定義了優(yōu)先級(jí)特別高的過濾器要小心是否會(huì)干擾 Session 的恢復(fù)尤其是那些依賴 session 做業(yè)務(wù)初始化的過濾器最好在 Session 恢復(fù)之后執(zhí)行。4.2 Redis 里 Session 的實(shí)際保存形式實(shí)現(xiàn)層面Spring Boot 2.7.x 默認(rèn)配置 RedisSessionRepository舊版是 RedisIndexedSessionRepository它會(huì)為每個(gè) Session 生成一組 Hash 結(jié)構(gòu)spring:session:sessions:1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed這里的 key 是 SessionIdHash 里保存的字段包括creationTime創(chuàng)建時(shí)間lastAccessedTime最后訪問時(shí)間maxInactiveInterval過期時(shí)間間隔sessionAttr:SPRING_SECURITY_CONTEXTSecurityContext 的序列化數(shù)據(jù)另外還有一個(gè)用于按用戶名查找 Session 的索引結(jié)構(gòu)spring:session:index:org.springframework.session.FindByIndexNameSessionRepository.PRINCIPAL_NAME這個(gè)索引結(jié)構(gòu)是實(shí)現(xiàn)并發(fā)會(huì)話控制maximumSessions的基礎(chǔ)需要查一下哪些 Session 屬于同一個(gè)用戶時(shí)就是通過這個(gè)索引去找的。4.3 序列化兩種方案JDK vs JSONSpring Session 默認(rèn)使用 JDK 序列化也就是 Java 自帶的 ObjectInputStream/ObjectOutputStream。簡(jiǎn)單但有一個(gè)致命問題序列化后的數(shù)據(jù)二進(jìn)制格式對(duì) Redis 不友好人類不可讀而且如果 Session 里放了某個(gè)內(nèi)部類對(duì)象這個(gè)類的結(jié)構(gòu)改動(dòng)后Redis 里的舊數(shù)據(jù)反序列化會(huì)直接失敗拋 ClassNotFoundException 或 InvalidClassException。另一種方案是使用 JSON 序列化通過配置自定義 RedisSerializer 實(shí)現(xiàn)。第一種方式簡(jiǎn)單可靠但是有兼容性隱患適合臨時(shí)調(diào)試。第二種方式推薦用于生產(chǎn)環(huán)境但你要為 Session 里放的對(duì)象自定義反序列化邏輯實(shí)現(xiàn)起來更繁瑣。最關(guān)鍵的一點(diǎn)是SecurityContext 里保存的 UserDetails 對(duì)象必須有默認(rèn)構(gòu)造函數(shù)并且字段不能有密碼等敏感信息直接裸露加密除外否則 JSON 反序列化時(shí)會(huì)遇到很多坑。我個(gè)人的實(shí)踐是早期直接用默認(rèn) JDK 序列化后來改了一次 UserDetails 的字段名所有在線的用戶全部登錄失效排查了半個(gè)多小時(shí)才定位到是序列化版本不匹配。后來干脆配了 JSON 序列化才徹底擺脫這類問題。Bean public RedisSerializerObject springSessionDefaultRedisSerializer() { return new GenericJackson2JsonRedisSerializer(); }注意這個(gè) Bean 的命名必須叫 springSessionDefaultRedisSerializerSpring Boot 才有自動(dòng)裝配邏輯去識(shí)別。Username 和 authorities 都會(huì)作為 JSON 字段保存調(diào)試起來很直觀。5. 完整測(cè)試代碼與驗(yàn)證步驟5.1 測(cè)試用 Controller 代碼整合做完要驗(yàn)證效果我習(xí)慣用一個(gè)帶 Session 讀寫和當(dāng)前用戶信息的接口來實(shí)測(cè)RestController RequestMapping(/demo) public class DemoController { GetMapping(/set) public String setSession(HttpServletRequest request, String value) { request.getSession().setAttribute(demoKey, value); return set value; } GetMapping(/get) public String getSession(HttpServletRequest request) { Object value request.getSession().getAttribute(demoKey); return value value; } GetMapping(/user) public String currentUser() { Object principal SecurityContextHolder.getContext() .getAuthentication() .getPrincipal(); return user principal.toString(); } GetMapping(/admin) PreAuthorize(hasRole(ADMIN)) public String admin() { return admin ok; } }這里的 PreAuthorize 需要額外開啟方法級(jí)安全校驗(yàn)在配置類或啟動(dòng)類上加 EnableGlobalMethodSecurity(prePostEnabled true)Spring Boot 2.7或 EnableMethodSecuritySpring Boot 3.x。5.2 多節(jié)點(diǎn)模擬與負(fù)載均衡實(shí)測(cè)先本地啟動(dòng)一個(gè)實(shí)例端口是 8080mvn spring-boot:run -Dspring-boot.run.arguments--server.port8080再啟動(dòng)一個(gè)實(shí)例端口改成 8081mvn spring-boot:run -Dspring-boot.run.arguments--server.port8081然后用 Nginx 把兩個(gè)端口做負(fù)載均衡或者直接用 Postman 分別請(qǐng)求兩個(gè)端口來模擬節(jié)點(diǎn)切換。第一步請(qǐng)求 8080 的 /demo/set拼上 valuehello拿到響應(yīng)里的 JSESSIONID Cookie。第二步拿著同一個(gè) Cookie請(qǐng)求 8081 的 /demo/get如果返回 value hello說明 Session 成功從 8080 共享到了 8081Redis 中間層生效。第三步請(qǐng)求 8080 的 /login用實(shí)現(xiàn)了 UserDetailsService 的賬號(hào)登錄登錄之后拿到新的 JSESSIONID也可能沿用同一個(gè)看 SessionId 策略請(qǐng)求 8081 的 /user能正常獲取當(dāng)前用戶名說明 SecurityContext 也成功跨節(jié)點(diǎn)恢復(fù)。5.3 檢查 Redis 數(shù)據(jù)的三種方式驗(yàn)證完業(yè)務(wù)接口最好去 Redis 里看一眼數(shù)據(jù)到底存了什么。命令行方式redis-cli keys * type spring:session:sessions:xxx hgetall spring:session:sessions:xxx可視化工具方面我常用 Another Redis Desktop Manager連接后可以直接看 Hash 結(jié)構(gòu)比較直觀。還有一種情況RDB 持久化開啟后可以在 dump.rdb 里看到 Session 數(shù)據(jù)。但這只作為排查輔助手段正常驗(yàn)證功能時(shí)用 keys 命令就夠了。6. 常見問題與排查技巧實(shí)錄6.1 會(huì)話不一致現(xiàn)象癥狀是偶爾出現(xiàn)未登錄刷新一下又好。排查思路是先確認(rèn)負(fù)載均衡策略是不是輪詢?nèi)缓蠓謩e在兩個(gè)節(jié)點(diǎn)上看 Redis 里 Session 是否存在。項(xiàng)目里如果自己玩讀寫分離或者主從同步延遲也會(huì)出現(xiàn)這類問題。Redis 寫入后立即讀取如果讀到的是舊數(shù)據(jù)就是復(fù)制延遲問題。一般可以通過強(qiáng)制走主庫(kù)讀來解決或者把 Session 的 Key 做一致性哈希分片但這個(gè)復(fù)雜度就高了。6.2 反序列化異常表現(xiàn)是登錄后正常第二次請(qǐng)求開始拋異常常見報(bào)錯(cuò)有Failed to deserialize object typejava.lang.ClassNotFoundExceptionInvalidClassException原因通常是 Session 里放的對(duì)象沒有默認(rèn)構(gòu)造函數(shù)、類結(jié)構(gòu)變更、JDK 序列化與 JSON 序列化混用等。排查方法是看 Redis 里存的內(nèi)容用 JSON 序列化時(shí)直接看字段JDK 序列化時(shí)就是二進(jìn)制亂碼不好排查。這類問題最有效的規(guī)避手段是統(tǒng)一序列化方案并且 Session 里放的對(duì)象 DTO 化不要直接放實(shí)體類。6.3 CSRF 問題導(dǎo)致登錄失效癥狀是最開始登錄沒問題過一段時(shí)間再次提交登錄發(fā)現(xiàn)沒有生效或者表單提交后 403。原因是項(xiàng)目里保留了 CSRF 防護(hù)Spring Security 默認(rèn)把 CSRF Token 也存到了 Session 中。由于某些原因 Token 過期或 Session 被重建Token 不匹配導(dǎo)致請(qǐng)求被拒絕。處理方法保留 CSRF 的項(xiàng)目確保頁(yè)面里的 Token 是從當(dāng)前 Session 讀出并動(dòng)態(tài)渲染的。前后端分離項(xiàng)目可以禁用 CSRF但前提是接口做 Token 鑒權(quán)比如 JWT。調(diào)試階段直接禁用 CSRF 快速驗(yàn)證但上線前記得評(píng)估。我個(gè)人的習(xí)慣是有頁(yè)面的項(xiàng)目保留 CSRF純 API 項(xiàng)目禁用。至于很多人糾結(jié)的“禁用 CSRF 后安全性下降”問題純 API 項(xiàng)目主要靠 Token 認(rèn)證而不是 Cookie風(fēng)險(xiǎn)是可控的。6.4 并發(fā)會(huì)話控制不生效配置了 maximumSessions(2)但同一用戶登錄第三個(gè)設(shè)備時(shí)舊的 Session 沒有被踢下線。原因一般是索引數(shù)據(jù)失準(zhǔn)也就是 Redis 里 FindByIndexNameSessionRepository.PRINCIPAL_NAME 這個(gè)索引沒有正確維護(hù)。常見情況是用戶信息變更后principal 名稱變化舊的索引還保留著。解決方法是查一下核心配置里 setIndexName 是否被正確設(shè)置或者干脆重寫注冊(cè)一個(gè) FindByIndexNameSessionRepository 的 Bean確保索引同步更新。6.5 Session 過期時(shí)間混亂癥狀是明明配置了 30 分鐘但實(shí)際過了幾分鐘就失效。先排查 spring.session.timeout 是否生效。注意 server.servlet.session.timeout 這個(gè)參數(shù)在 Spring Boot 2.x 里也會(huì)對(duì) Session 生效如果兩個(gè)都配置了要搞清楚哪個(gè)優(yōu)先級(jí)更高。再排查 Redis 的過期策略和內(nèi)存淘汰機(jī)制。如果 Redis 設(shè)置了 maxmemory-policy allkeys-lru那內(nèi)存壓力大時(shí)Redis 可能把 Session Key 給淘汰掉導(dǎo)致 Session 提前失效。這個(gè)要特別留個(gè)心眼生產(chǎn)環(huán)境給 Session 用的 Redis 實(shí)例要單獨(dú)規(guī)劃不要和緩存數(shù)據(jù)混用一個(gè)庫(kù)尤其不要開 LRU 淘汰策略。6.6 安全配置里踩過的坑匯總登錄接口必須在 permitAll 里否則登錄請(qǐng)求直接被攔截。defaultSuccessUrl 只在直接訪問登錄頁(yè)時(shí)生效如果用戶是訪問受保護(hù)資源被重定向到登錄頁(yè)的登錄成功后會(huì)回到原資源此時(shí) true 參數(shù)決定是否強(qiáng)制跳轉(zhuǎn)到默認(rèn)頁(yè)。靜態(tài)資源CSS、JS、圖片要 permitAll否則頁(yè)面樣式加載不出來瀏覽器調(diào)試器里一片紅容易誤判成框架問題。logout 配置里 deleteCookies 建議加上 JSESSIONID否則退出登錄后 Cookie 還存在下次訪問還會(huì)帶一個(gè)無(wú)效的 SessionId。7. 一些實(shí)操經(jīng)驗(yàn)和擴(kuò)展思路這套整合方案我用過不少實(shí)際項(xiàng)目有幾點(diǎn)經(jīng)驗(yàn)值得單列出來分享。第一序列化方案盡量在生產(chǎn)環(huán)境用 JSON別貪圖默認(rèn) JDK 序列化的省事。JDK 序列化在代碼迭代時(shí)帶來的版本兼容問題比配置 JSON 的麻煩更讓人頭疼。第二Redis 實(shí)例要獨(dú)立規(guī)劃。把 Session 和業(yè)務(wù)緩存混在一起出問題時(shí)互相干擾尤其遇到 Redis 內(nèi)存淘汰Session 被無(wú)辜清掉排查場(chǎng)景非常隱蔽。第三從安全性角度考慮Session 里不要放敏感明文數(shù)據(jù)。Session 存到 Redis 后能訪問這個(gè) Redis 的人就能看到這些數(shù)據(jù)Redis 本身沒有強(qiáng)認(rèn)證機(jī)制權(quán)限控制必須做好。再往深了走可以擴(kuò)展的方向有這么幾個(gè)Session 固定攻擊防護(hù)Spring Security 默認(rèn)會(huì)在認(rèn)證成功后輪換 SessionId但在配置里顯式確認(rèn) changeSessionId 策略是安全的。多端登錄、移動(dòng)端和 PC 端并存場(chǎng)景需要在這種安全性和便利性之間做權(quán)衡。分布式場(chǎng)景下的踢人下線功能基于 Spring Session 的事件監(jiān)聽SessionDestroyedEvent / SessionExpiredEvent可以實(shí)現(xiàn)被頂號(hào)下線的業(yè)務(wù)邏輯。Redis 高可用和連接穩(wěn)定性Spring Session 對(duì) Redis 的依賴是強(qiáng)依賴Redis 掛掉整個(gè)應(yīng)用的登錄體系全部癱瘓。所以要考慮 Redis Sentinel 或者 Cluster同時(shí)本地應(yīng)用層要做好快速失敗和告警。性能調(diào)優(yōu)Session 數(shù)據(jù)量大的情況Redis 網(wǎng)絡(luò) IO 會(huì)成為瓶頸??梢宰?Session 數(shù)據(jù)瘦身盡量減少存入 Session 的對(duì)象大小該用的分頁(yè)放數(shù)據(jù)庫(kù)的就別塞 Session 里堆積。項(xiàng)目上線之后我通常會(huì)加一個(gè)監(jiān)控定時(shí)掃描 Redis 里 Session Key 的數(shù)量和過期分布。這能在問題發(fā)生前提前看到風(fēng)險(xiǎn)比等用戶反饋投訴要主動(dòng)得多。如果哪天生產(chǎn)環(huán)境用戶突然開始集體掉線記得第一反應(yīng)去查 Redis 的慢查詢?nèi)罩竞蛢?nèi)存狀況大概率能快速定位問題。最后補(bǔ)充一個(gè)小技巧本地調(diào)試時(shí)用兩個(gè)不同端口的實(shí)例加 Postman 手動(dòng)攜帶 Cookie是最快的驗(yàn)證手段。每次檢查 Redis 數(shù)據(jù)前先看下系統(tǒng)時(shí)間確認(rèn)時(shí)區(qū)沒有偏移否則 Session 過期時(shí)間的計(jì)算會(huì)讓你一頭霧水。這套鏈路到現(xiàn)在我已經(jīng)跑通好多回了照著配一遍半小時(shí)內(nèi)能驗(yàn)證完整個(gè)流程。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
强奸乱伦免费网站| 污到发麻的视频 国产| 97一区二区三区视频| 91艹B视频| 亚洲丝袜二区在线| 日韩二三区| 免费啪啪av| 欧日韩一二三f区| 极品白嫩美女白浆成人福利在线看| 蜜屁av| 97国产色综合| 日韩激情中文字幕有码| 十八禁啪啪视频| 欧美一区二区日韩传媒搭讪精品| 人妻精品一区二区在线| 国产91福利小视频在线观看| 超碰社区97| 青青草密桃在线播放| 男人午夜天堂| 久久黄黄黄| 美女97超碰| 成视频在线观看免费看| 一级成人性爱| 天天狠操| 亚洲中文字幕在现观看| 亚洲 欧美综合| 98超碰日本| 欧美日综合| 操逼逼中文字幕| 亚洲一区二区av| 亚洲综合性网址| 久久久久久久久久久久久9999| 九九九九热| 亚洲和欧美裸体美女双飞视频| 九九性爱网| 立川理惠被中出无码| 欧美性五月| 欧美熟女激情| 亚洲男人的天堂V| 色色国产| 麻豆久久视频在线地址| 六月丁香啪啪| 99热最新网址| 自偷自拍的亚洲视频| 国内毛片无遮挡国产| 亚洲欧美首页| 中英熟女操女| 日韩欧美午夜一区二区| 超碰99re| 亚洲97在线| 四虎AV在线播放| 欧美精品不卡一二三四在线91| 欧美久久久| 伊人伊人LD| 少妇超碰在线| 伊人色综合超碰| 91原创在线观看| 99热这里只有精品8| 午夜丁香| 亚洲图片第一页| 成人无码欧美一级A片狼牙直播| 狠插 制服 自拍| 欧美日韩人人精品| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 日韩欧美tv一区二区在线观看| 国产又粗又大硬免费色网视频| 三级色影综合网| 韩国毛片一区二区三区| 欧美综合综合| 国产精品九九九| 日日不卡av| 亚洲天堂一区| 亚洲经典啪啪| 欧美综合站| 亚洲1区| 青娱乐 成人娱乐在线| 91天天日| 久草线上视频免费看| 日日碰视频网| 亚洲人妻在线精品| 飘花国产午夜精品不卡| 九九色婷婷| 激情婷婷黑人91| 成人天天爽| 日韩欧美~中文字| 日夜精品| 欧美国产伊人久久久久| 久久国产99精品72福利| 久肏视频字幕| 女生看匆91网站| 精品人妻一区二区三区四区不卡在| 青娱乐国产剧情av一区| 日本精品无码三级网站| 七久久久| 91美女视频电影| 九七色图| 亚洲国产成人高清在线| 亚洲熟女一区| 精品妇操一区二区三区| 人人看欧美性爱| 欧美天天插| 欧美性天天影院| 亚州性色| 天天操夜夜操| 久久婷婷苹果| 日本天天操| 中亚精品极乱| 亚州大图综合色图| 国产精品高清2021在线| 色蜜AV| 尤物av网站| 97热视频在线观看| 1204av韩国| 亚洲女人91| 久久99午夜精品一区人妻| 国产精品老熟女一区二区| 欧美暴力猛交| 色黄污美女啪啪啪免费网站| 亚洲熟妇图片| 成人小说另类在线| 殴美,日韩国产伦精品| 91国内外在线| 淫荡熟女乱伦网| 亚洲色图欧美色图制服丝袜| 精品69网| 蜜桃色色网站视频三区| 亚洲久9| 伦伦成年午夜免费视频| 国产精品欧美激在线| 久久久久久久9| 日本一区二区不卡精品| 伊人嫩草| 操逼操操操91| 成人一二三区| 亚洲18禁| 成人性爱免费播放| 黑丝日韩av丝袜av| 国模无码人体一区二区三| 久久欧美按摩999| 色逼综合| 99天天超碰| av爱爱爱| 日韩图区| 男人的天堂不卡一区二区 | 97免费视频在线观看| 国产亚洲 中文欧美久久| 九九九成人| 97爱啪| 国产久久av| 97频视在线| 家庭乱伦性爱av| 日韩中文字幕熟妇人妻| 成人性爱AV在线免费观看| 亚洲精品欧洲精品| 九九香蕉网| 青操影院| 99久视频| 综合久久97| 超碰97男人| 偷拍亚洲熟女视频播放| 91精品国产91久久久久久久久久久久| 狠狠综合| 婷婷av在线中文字幕| 欧美大片天天看| 日本十八禁免费看污网站| 91殴美大片| 国产91av在线播放| 99色在线| 国产精品91ai| 91久久久久久久| 人人看黄色视频| 青草视频人妻在线观看| 五月丁香婷婷啪啪| 秋霞网—男女啪啪亚洲免费体验区| 乱欲性色| 强奸乱伦Av网| 99国产精品久久久久久久成人热 | 91精品国产乱码| 国产亚洲精品自在线亚洲情侣| 色综合久久88色综合久久天天| 黑人精品XXX一区一二区| 六月婷婷综合| 国产一级黄色片在线观看| 国产丝袜啪啪| 97操在线| 超碰1024久久| 啊a一区在线| 逼逼逼逼操操操操操操操操操午夜剧场| 亚洲色综网| 麻豆AV一区二区| 青娱乐日韩无码| 视频国产欧美在线播放| 欧美色老汉| 麻豆激情综合| 妺妺跟我一起洗澡没忍住| AAAA欧美日韩| aa片毛片| 91综合色| 插入逼91| 久操视频在线观看| 久久黄黄黄| 麻豆一区在线| 国产精品久久久777| 思思热在线| 亚洲 欧美 偷拍 唯美| 91A欧美电影网站| 免费超碰97久久| 欧美少妇人妻| 超碰在线91| 夜夜做夜夜爽精品视频| 97国产天堂岛| 好看的91视频| 欧洲精品一二三在线| 欧美在线官网| 亚洲欧美九九| 91国产精品熟女| 婷婷色一区| 色婷婷狠狠| 在线播放中文字幕| 91美女中出| 97综合在线| 中文字幕人成乱码熟女香港| 亚洲欧美另类激情小说| 国语av狠狠色丁香婷婷综合激情| 久久久久久久久9| 99re6国产精品99re| 神马久久啊啊| 大香蕉男人的天堂| 国产视频小说| 人人操人人精品影片| 91综合国产精品| 久久精品亚洲东京热色播| 久久超碰爱| xxx亚洲午夜天堂| 91jk色拍| 天美av在线| 亚洲爱爱视频一区二区| 久久久久921| 大干人妻| 99婷婷| 久久久久国产精品片区无码直播| 婬女免费一二三区A片| 伊人女女资源在线观看| 97视频在线播放| 亚洲97成人在线观看| 成 人 A V免费视频在线观看| 综合另类| 福利伊人玖玖国产| 99色在线视频| 神马久久中文字幕| 破处bbq| 97手机日韩| 国产黄色影片在线观看| 婷婷亚洲综合| 97久久超碰国产网站| 精品人妻一区春色| 久久内射| 精品中文字幕第一页| 成人午夜小视频手机在线看| 玖色AV| 天天透伊人| 日韩中文字幕视频在线观看| 亚洲18禁| asc国产精品| 强奸乱伦 亚洲一区| 超碰成人最新最好看| 伊人久久婷婷| 日日妻色网| 亚洲 欧美 第一页| 丁香五月综合| 欧美永久激情一区二区| 欧美色999| 亚卅熟女乱色| 热久日综合| 国产91 丝袜在线播放00-百度| 一区操逼| 熟妇最新先锋一二三区| 青草精品视频-日本久久久久网站| 无遮挡一级毛片视频免费的| 在线观看黄色电话| 欧美色日本| 国产传媒av天美传媒在线| 国产久久av| 久久手机好看网站| 91AV天美在线视频| 亚洲国产成人精品999| 综合久久婷婷| 亚洲怡春院| 欧美人人曰人人操人人射射| 人人澡人人爽人人精品| 欧美成97爱| 亚洲精品日日夜夜52| 97在线欧洲| 国产精品人妻免费精品| 国产免费一区二区在线A片视频| 熟女高潮合集-永久久久-成人AV | 亚洲天堂情色| 人妻另类| 少妇干B| 久插综合| 影音先锋日本乱伦| 91激情综合| 91天天| 精品精品精品| 国产精品点击进入在线影院高清 | 一卡二卡在线播放| 亚洲啪啪性视频| 日韩丨制服丨中文|在线| 成在线人在线观看视频| 欧洲射精91| 日韩一级欧美一级国产一级台湾 | 国产精品成人在线| 97在线公开视频| 久操凹凸视频| 久艹99| 国产曰批免费观看久久久| 久久久久久久六六| 中国东北熟女老太婆内谢| 成人片视频| 在线强奷到舒服的无码视频| 亚洲不卡一| 欧美成人一级免费电影| 伊人久大| 久操综合在线| 91丨九色丨国产丨人妻在线| 国外91| 免費黃色視頻觀看一| 天堂亚洲精品| 国内91熟女人妻丝袜天天精品视频在线 | 天天日B狠狠操| 96精品久久久久久久久| 欧美熟妇人体| 日本黄色精品专区网站| 久久精品中文| 免费观看啪视频| 九月伊人中文字幕| 金典av| 国产精品青草综合久久| 精品少妇99| 日韩紧密久久| 亚洲成人美女无吗| 88xx成人精品视频| 99热18这里只有精品| 日本东京热加勒比久久| 97精品一区二区三区免费| 青青操97| 日本日皮视频逼| 99热这里只有精品18| 亚洲码和欧洲精品激情系列| 99精品久久| 国产美女口爆吞精视频| 偷拍导航视频网站| 中文字幕日韩精品一区二区三区| 韩三级a视频在线观看 | 内射小黄片| 日产精品久久久一区二区| 福利风月五月天影院| 久久小视频| 999精品久久久久久久| 99蜜桃臀久久久欧美精品网站| av一区二区三区 中文| 国产400孕妇孕交群| 青青草乱入乱欲视频在线观看| 伊人五月天| 免费av高清无码| 99re28在线观看| 亚洲美女 晚间男人天堂 | 久久亚州精品成人Av无| 啊啊啊久久| 内射中国少妇高清视频免费视频| 国产精品小视频一区二区三区| 手机在线免费看的av| 美女好片色日本| 偷拍在线观看视频| 少妇人妻精品| 99少妇精品视频| 国产免费一区在线观看| 在线A日本| 日本一级真人黄色性爱视频| 91四海无码日韩欧美| 嗯嗯啊啊好大好爽| 日韩午夜国产| 第二页中文字幕| 精品超碰中文在线| 亚洲丝袜色| 九九热精品| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 日韩有码 一区二区三区| 91制服丝袜| 精品国产乱码久久| 97av,com| 亚洲s在线观看| 亚洲AV无码黄色强奸| 桃花色综合影院| 91w欧美| 成人青青草原伊人| 俞拍自拍| 欧美综合亚洲| 日韩精品国模| 国产精品久久久久999| 加勒比AV天堂| 欧美一区二区三区成人性生活| 国产中文福利| 国产青青美女玩逼视频| 色综合99999| 日韩不卡码| 中国小夫妻勾搭露脸淫荡对白| 欧美性战999| 九九热五区| 丁香六月婷| 大香蕉碰碰| 人妻碰碰碰碰碰碰| 丝袜综合| 欧洲站一级二级三级h| 热久久无毒不卡| 国产久久久久久久久一区二区 | 欧美偷拍| 国产一区二区在线看| 大香蕉伊人75| 亚洲黄色视频在线观看视频| 一本色道综合久久欧美| 玖玖爱免费观看视频| 综合一区中亚洲国产成人综合精品 | 久久久精品中文字幕爱豆| 草莓精品视频在线免费观看| 日韩免费看黄片| 日韩色欲久久一二三四区| 午夜男女爽爽爽在线视频| 久久草草欧美精品| 有码人妻系列| 国产91丝袜在线播放蜜月| 五月天AV资源| 蜜乳中文字幕a在线| 久久性生大片免费观看性| 成人麻豆av电影网站| 精品国产一区二区三区在线播出| 欧美成人性爱视频大全| 激激五月| 不卡六六在线91| 免费在线看黄片av| 探花精品视频| www.高清无码诱惑一区.com | 天天综合-91入口| 色波多| 亚洲第一黄色av网站| a网站免费观看| 国产青一二三| 国产白丝网站| 美女极品一区二区三区| 99国内精品| 97天天操天天干| 91美女視頻| 婷婷五月天激情四射| 亚洲精品xxx| 欧美色老汉| 9国产超碰| 啊啊啊操一区| 久久超碰av在线| 热99这里有精品综合久久 | 丁香色五月 97干| 色色五月天婷婷| 超碰538| 福利视频网站| www超碰| 亚洲图片 激情小说| 日本成a人v网站在线观看| 图片区小说区| 日本精品一区二区三| 精品国产91内射久久| 国产精品一区午夜福利| 亚洲精品国产AV天美传媒| 中文字幕乱亚洲美女精品一区| 免费的黄片有限公司| 久久久亚洲精品电影免费看| 久久东京热成人| www.色操逼| 男人的天堂三级| 偷拍偷窥与盗摄视频专区| 丁香五月婷婷基地| 亚洲视频精选| 操屄不卡视频| 色噜噜人妻av中文字幕| 国产真实野战在线视频| 内射黑丝袜| 性影在线视频| 久久禁| 熟女六十路| 欧美 日韩第一性色| 日韩丰满熟妇| 大香蕉狠狠爱| 色五91| 亚洲一区二区在线观看91| 亚洲 综合 欧美| 日本女人久久久| 国产久久一区二区午夜| 91在线免费精品视频| 不卡九肏| 国产 热久久久久国产精品| 天天综合麻豆视频| 美女午夜福利免费视频| 啊啊啊在线看| 免费观看有码高清视频| 国产无码精品久久久久久| 97超碰色五月| 在线看的av| 蜜臀av中文字幕| AV中文在线| 极品国产内射| 精品一区二区三区蜜桃臀www| 温婉少妇玩3p| 91蜜臀人妻中文字幕在线| 蜜桃久久一区二区三区| 操B视频日韩无码| 中文一区二区| 中文字幕日韩国产传媒欧美精品| 欧美性爱第一页久久| 欧美色色人| www.狠狠| 亚洲无码?第一页| 东京热男人天堂| 精品国产乱码久久久兰草影视| 婷婷AV一区二区三区| 狠狠爱夜夜| 亚洲日韩熟女人妻高清在线| 欧美性爱伊人| 天天视频黄| 欧美亚洲韩国视频十五区| 欧美黑人猛交春色影视大全| 99热99在线播放激情| 欧美劲爆第一页| 60秒免费小视频| 天天做天天爽| 一起草日韩| 精品免费一区| 啊啊啊啊嗯嗯在线久久久| 亚洲 se图 欧美电影| 插欧洲美女欧美精品| 天天视频网站黄| 国产白丝网站| 人妻少妇久久中文| 精品小视频在线| 操久久久久久| 亚洲天堂热| 免费在线黄片视频| 91东京热男人的天堂| 青青草色AV| 亚洲日产专区婷婷| 欧美在线伊人色| renqi久久久久久久久久久久| 91视频伊人| 天天综合欧美| 清纯唯美第一页| 中文字幕伊人| 97超碰免费生活| 加勒比综合九九99视频在线播放| 欧美精品成人亚洲| 国产精品69人妻无码久久久| 涩涩涩综合| 婷婷超| 欧美天天弄| 9久久久久久| 91国产美女丝袜足交精品视频| AV九九| 美女尤物人人操| 手机在线免费看的av| 激情综合网亚洲| 国产一区二区在线播放| 色香AV| 亚洲男人天堂2017| 97Ai亚洲| 亚洲97在线观看| 揉揉日日日日| 久久精品久| 97在线免费| 国产97在线 | 亚洲| 人人澡人人干| 我想要 啊 啊 啊| 久操免费观看| 亚洲精品久久久久毛片A片拉屎| 我要色综合网| а√天堂资源官网在线资源| Sekablack无码一区| 成人免费看吃奶视频网站| 黄色激情电影在线观看| 久久无码成人| 999岛国大片| 午夜男人一级A片7777| 99热啪啪| av在线浏览| 亚洲综合网电影91| 乱码熟妇人妻久久久| 大香蕉啪啪啪啪在线| 色哟哟av网址| 久久精品国产亚洲粉嫩| 久久六六| 欧美日韩97| 日韩91网| 99re免费视频精品全部| 黑人无码一区二区| 日韩偷拍色图| 亚欧洲日韩国产精品| 一级成人性爱| 亚洲第一页色网| 在线综合网| 色官网在线| 玖玖视频在线资源一区二区三区| 欧美性色综合网| 日日骚一区二区三区| 蜜乳AV.COM| 亚洲美女精品| 精品无码秘 人妻一区二区| 日本片日本片祼观看网站在线看中文版网页在线看 | 992这里有精品| 四虎AV在线播放| 久久综合婷婷| 九九热av| 色一色综合网| 91精品婷婷国产综合久久竹菊| 国产2.3.4区| 亚洲自拍天堂| 精品亚洲一区在线观看| 91艹逼精品| 欧洲Au麻豆| 麻豆 亚洲 97| 妇女乱色二区| 久久久久久久91| 国产粉嫩蜜臀av一区二区三区| 99啪啪视频| 老鸭窝成人免费毛片视频| 亚洲午夜AV| 91老司机在线| 日韩情色视频| 黄色激情电影在线观看| 久艹99| 激情五月婷婷| 天天视频网站黄| 亚洲少妇激情一区二区三区| 欧亚免费视频| 一区二区精品日韩欧美在线观看 | 性爱动态120秒| 欧美综合国产精品久久丁香| 双插在线| 99热亚洲天堂| 久久香蕉影院| 国产黄色小视频网站| 97超碰影音| 2019AV天堂| 99无码视频| 天堂中文日本在线观看| 丝袜美腿亚洲| 国产白丝AV| 伊人991| 91蜜桃婷婷狠狠久久综合9色| AV 少妇 人妻 偷拍| av天堂天堂av日韩| 9久久久久久| 成人夜夜| 狠狠2050在线观看| 亚洲永久AV无码精品秋霞| 亚洲男人天堂手机版| 97超碰jingpin| 欧美亚男人的天堂| 欧美精品91| 大香蕉琪琪日本女优不卡| 韩国嫰模上门援交视频| 久草色在线观看| 91综合色噜噜| 欧美极品性爱天天射| 久久精品国产亚洲AV片多多| 国产原创自拍| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 另类天堂| 蜜臀久久99精品久久久久免费观| 草伊人高潮喷水超碰| 日本中文字幕一区| 欧美日韩亚洲天堂| 国产AV毛片| 亚洲av夫妻操穴网| 四虎在线免费视频| 超碰色综合| 国产一区二区av综合| 久热色情精品| 熟女少妇一区二区三区| 欧美αv.com| 人人人人人人少妇| 天堂av最新电影网| 大香蕉视频一二三区| 久操大香蕉手机视频在线看 | 亚洲 欧美 第一页| 家庭乱伦网站国产| 久久亚州高清| 91国产操逼视频| 97AV爱| 欧美精品黑人猛交高潮| 亚洲欧洲网站免费观看| 亚洲日韩久久精品一区| 日韩人妻一二三区视频| 成人AV素股で擦久久| 婷婷五月天激情四射| 亚洲av无码成人精品国产| 日韩欧美蜜桃精品久久中文字幕久久| 国产精品高清2021在线| 免费人人搞97| 国产精品盗摄 偷窥盗摄| 夜夜狼人妻| 翔田千里Av在线| 超碰久久草| 一本一道波多野毛片中文在线| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 日本欧美不卡| 91色碰| 香伊人在线| 欧美激情一| 久久婷婷影院| 欧美日韩大香蕉| 操人妻逼91| AV污污污污| 啊啊啊好大好深| 熟女欧美日韩综合婷婷| 中日亚韩免费视频| 9精品久久久久| 嗯~啊~快点 死我视频| 欧美不卡二区| 人妻久久一区二区三区| 91欧美美女日韩国产婷婷| 精品九九九九九九九九九| 天天射天天| 国产精品白丝www| 久久综合中文国产| 天天干天天插| 99精品久久久久久久婷婷| 欧美日韩在线小说 | 少妇69中文| 色色五月天婷婷| 欧美强奸乱能| 成全动漫视频观看免费下载| 人妻久久| 欧美91色| 超碰视97中文| 91 综合 色| 97色涩| 欧美久久婷| 曰韩欧美国产传媒麻豆第一区| 欧美一级黄片视频在线| 欧美 亚洲 第一页 | 骚货人妻偷情自拍在线视频| 国产99久久99热这里只有精品15| 成人一二| AⅤ片水多多| 日日夜夜精品视频| 亚州综| 少妇淫妇久久久久久久| 精品人妻少妇| 国产精品久久久久久久久久久久久久| www男人天堂| 女生看匆91网站| 久久精品店| 女沟厕偷窥piss小便| 伊人一区二区在线播放| 俄罗斯一区二区视频在线观看| 欧美成熟性爱精品| 色网在线视频观看免费| 日本道久久综合色色| 欧美日韩中文亚洲v在线综合| 麻豆国产免费影片| 激情五月天网站| av情色影音| 大香蕉色欲AV| 日本污ww视频网站| 五月丁香综合啪啪| 调教熟妇 久久久久久| 欧美巨大性舒爽顶到了| 熟妇国产免费一区| 亚洲AV永久无码精品成人调教| 亚州一区二区| 日本三级小说中文字幕| 国色综合天| 国产视频第二页| 国产中文字幕在线点播| 日欧操屄视频| 亚洲综人网| 天天天干977| 色情五月综合婷婷| 综合色区偷拍| 欧美综合骚| 亚洲av综合伊人久久| 夜夜高潮夜夜爽高清视频一| 中日韩免费看男女操逼大全| 成人女人国产| 探花一区在线| 性色亚洲| 亚洲一区二区 麻豆传媒| AV无码久久久精品| 诱惑网综合| 91撸色网 玖玖网 欧美| 午夜福利视频在线一区| 日韩中文字幕在线视频观看| 大香蕉国产中文自拍| 日韩乱伦视频| 操国产逼| 婷婷久久久精品| 国产大片精久久久久久| 伊人黄色视频免费观看| 九九九九久久久久| 天美传媒av一区二区| 亚州精人品大香蕉| 中文字幕交换人妻| 老熟女91| 大香网伊人久久综合网eew| 无码WWW免费视频网站| 日本精品一区三区| 啊啊啊啊啊啊在线观看| 精品视频专区| 草草草视频在线免费看| 黄色av片三级三级三级免费看| 久久伊人在线五区| 亚洲色人| 亚洲美乱| 亚洲天堂人妻熟妇视频| 中韩中文字幕在线观看| 内射日韩大臀美女| 精品人妻av在线播放| 天天欧美| 校园春色欧美| 泰国AV在线观看| 久久人妇| 国产精品干干干| 欧美人妻精品| 欧洲亚洲少妇| 吻戏激情性巴克| 国产9 9在线 | 亚洲| 亚洲五月丁香花狠狠干一区二区三区 | 在线播放一级无码视频| 天天操天天干美女网址导航| 伊人影院中文字幕| 欧美色乱| 人妻人久久精品中文字幕| 一区二区视频在线播放| 高清无码久操视频| 96一区二区| 另类欧美| 一区超碰一区| 青青草日韩免费观看高清在线| 九九九综合精品| 色婷婷综合网| 丁香五月激情综合| 无码操逼视频一下| 国产91福利小视频在线观看 | 欧美一级A片在线看视频性色| 浓厚中出中文字幕在线| 激情小说在线视频| 国产精品久久久久久久久久久久久久吹| 99黄页网站| 91少妇通奸网站| 色眯眯av| 久操电影网| 欧美亚洲天天| 一区二区不卡视| 国产激情视频一区区三区| 国产一二三在线视频五十路| 少妇天堂| 大象AV在线| 激情五月天插| 爆操无码| 91人妻超碰| 2019AV天堂| 欧美黑人168页欧美黑人167| 欧美丝袜美女电影一二三四区| 夜夜青青无码影院| 好涩综合| 日日噜噜夜夜狠狠视频无| 国产精品久久久久久无码红治院| 欧美丝袜制服久久| 亚洲天堂区| 日韩美女高潮喷水视频| 精品国产a∨一区天美传媒| 91夜色| 极品色www影院| 97超碰色屌| 青青草在线视频美女| 欧美性爱第一页久久| 天天色播亚洲综合网站| 欧美性天天影视| 久久久久久中文| av一区二区三区不卡| 色五月亚洲| 另类专区加勒比| 久久精品日韩| www.四虎在线| 欧美国产婷婷久久| 国产精品一区二区三区,亚洲综合 性开放中文AV高清无码免费看 | chaopen97久久| 黑人白女精品一区| 欧美不卡在线美女| 亚洲日韩97| 亚洲 欧美 手机在线观看| 日本不卡码黄色 | 亚洲日韩青青草色月| www国产天美久久久| 久久麻豆一区二区| 欧美亚洲首页| 97自拍视频在线| 超碰在线91| 日本熟妇一区二区三区| 九九九九9999| 日韩三级久久久| 美国日韩黄片| 国产天天看| 亚洲乱码国产乱码精网站| 亚洲男人的天堂在线看| 波多野结衣先锋影音| 亚洲国产青青| 日本中文字幕在线电影| 超碰九区| 欧洲Au麻豆| 日韩国产在线观看av| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 国产精品久久久久久夜夜夜夜| 国产AV激情无码久久无码| 精品一区二区久久| 五月色网| 超碰97人人cao| 天天舔天天日天天射| 在线观看精品国产免费| 全国男人天堂网| 日欧美色| 日韩一级免费性爱| 中文字幕精品探花视频| 激情欧美日韩女同久久| 大香蕉综合在线| www.99色| 97极品无码| 日本新免费二区三区| 屌色在线97视频| 狼狼色丁香久久婷婷综合五月| 极品美女嘿咻| 天天看片麻豆| 人妻AV 中文字幕的| 男女激烈网站最新| 女生久久网| 久久久96精品| 男人天堂综合| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 欧洲与亚洲欧美精品中文字幕| 日韩性爱免费观看视频| 天堂中文资源在线bt| 太久视频| 5278欧美一区二区三区| 国产尹人在线视频免费| 欧美性爱十八禁| 成人性爱电影一区二区| 五月丁香激情啪啪| 草草影院在线视频| 大香蕉十区| 久久久久9| 国产精品一区二区麻豆| 好涩综合| 永久电影三级在线观看| 亚洲一区操| 操操操日本的逼| 国产视频一区二区免费| 超碰99在线观看| 亚洲 图片 综合91| 欧洲一区二区三区免费| 国产成人精品午夜福利| 天天影视综合色| 亚洲天堂男人网| 黄片qw| 伊人五月天激情| 日日操天天操| 国产美脚女优尤物在线观看| 色男人色天堂东京热| 亚洲狠狠入| 日本国产欧美一区三区二区| 日韩亚洲精品一区二区| 成人av动漫在线观看| 啊啊啊 在线观看| 黑人精品久久97| 97在线免费视频观看| 91大神精品长腿在线观看网站| 欧美人妻一区| 久久久久久久久久久久久9999| 91麻豆一二三区| 久久久偷拍| 日韩人妻制服丝袜av| 亚洲综合在线视频| 日韩av色图综合| 男人天堂新| 国产av波波国产精品| 97操碰| 97频视在线| 亚洲在线欧美| 欧美激情中文字幕另类小说| 天天操女人| 天操天操夜操夜月操月年年操操| 国产成人亚洲精品无| 少妇高潮对白在线观看| 99re这里只有精品中心播放| 色香91| 国产精品嫩草影院午夜两性| 亚洲人妻av| 亚洲精品一卡二卡三卡福利视频网站 | 热热色青青草| 国产成人无码a| 久久秀这里有精品| 欧洲色综合| 日本激情免费大片| 偷拍亚洲高清图片| 九九九九97| 淫荡网址| 丁香五月婷婷色| 91在线国产后入风骚翘臀美女素人| 青娱乐国产剧情av一区| 亚洲另类电影| 欧美极品少妇| 欧美性爱无码一区二区三区| 九色97| 91性网| 日本人妻A片成人免费看片| 久久熟女久| 久久中文字幕一区不卡| 日韩性色b| 精品对白久久不卡| 大香蕉九九| 5252色欧美在线男人的天堂| 日韩不卡在线一区二区| 日韩精品人妻中文字幕久久久| 日本一区二区不卡| 一色网男人的天堂| 特污精品女优骚货黄色视频在线免费观看| 伊人五月天激情| 久久久九九九九| 精品午夜福利国产一区二区在线观看| 欧美性爱第1 页| 97人肏| 特色a在线上| 亚洲av在线免费观看| 97这里有精品| 色婷婷丁香五月天| 丝袜 中出 制服 人妻 美腿 中文字幕| 欧美成人午夜免费福利785| 热久久无毒不卡| 成人性爱高清视频免费看| 综合色久欲| 影音先锋国产精品| 黑人性暴力毛片| 日本在线一二 | 一区二区三区机械有限公司| 天天综合站| 久久99网站| 一起草视频在线| 暖暖精品二区三区观看| 囯产精品久久久久久久久久梁医生| 国产伦精品免编号公布| se吧提供91精品国产91久久久久久| caopeng97人妻| 欧美 日韩 亚洲 春色| 九七毛片九九毛片| 日韩精品一区二区三区色欲 | 天天综合,91综合永久| 久久专区| 久久99999| 免費黃色視頻觀看一| 大香蕉视频啪啪啪啪| 人妻夜夜爽天天爽麻豆三区网站 | 亚洲情色婷婷五月天| 国产成人 综合亚洲 天堂| 天天操人人操骚逼网站| 国产AV高清AV无码| 国产农村妇女精品| 高跟伊人julia ann| 人人操人人叉人人插人人| 香港久久久| 国产天天骚| h无码动漫在线观看| 欧美色图欧美| 97资源欧美| 国产粉嫩出水在线播放| 九九碰九九爱97超| 久操在97| 九九热免费视频| 91丨九色丨国产丨人妻在线| 日本 情色 1区2区3区| 国产乱码久久| 狼狼色丁香久久婷婷综合五月| 我要色综合网站| 干b在线性社区| 五月婷婷激情网| 黄色免费网| 97超碰伊人| 麻豆福利视频导航| 99久久网站| 大香蕉一区二区在线观看.| 全国男人天堂网| 亚州色站 日韩电影| 婷婷丁香五月激情啪啪| 91视频伊人| 91bbbbbb| 亚洲综合射| 蜜臀av中字字幕网站| 强奸乱亚洲| 国产欧美日韩一区二区三区| 深夜国产福利| 国产精彩女在线观看视频| 91蜜臀在线久久久久| www成人啪啪18秘 免费| 人人做,人人操,人人摸| 男人天堂2019| 中文字幕人乱码中文字的预防方法| 精品妇女一区二区三区| 最新啪啪视频| 国产精品视频自拍在线| 97狠狠| 清纯唯美综合亚洲| 干B| 国产SV一线| 插入综合网| www.色综合| 日韩人成网站在线播放| 久久久亚洲Av| 免费观看日本操逼视频| 久久久青青草| 中文字幕国产| 国产日韩中文字幕欧美| 天美传媒在线一区| 一区二区三区四区姦女| 欧插网站| 精品超碰中文在线| 五月丁香激情啪啪| 婷婷中文网| 欧美性爱1080p| 95自拍视频在线观看| 一级人妻性爱视频| 老司机福利青青草| 超碰97人妻在线| 亚洲风情在线观看| 久久久啊啊啊| 欧美亚洲系列| 99热销国产这里有精品| 四虎影视国产精品| 伊人9| 91操熟妇| 国产又粗又长视频| sewuyueav| 天啪| 婷婷成人久久久精品| 另类视频在线| 国产丝袜视频| 亚洲综合97中文网| 在线观看AV不卡| 九九九久千久久激情蜜桃在线看 | 亚洲暴力强奸AV| 国产 无码 一区二区| 日韩精品永久在线观看| 日本亚洲熟女视频| 亚洲超碰在线| 蜜桃久久综合视频| 久久9久9久99久9久9| 欧美激情 日韩精品| 色九九九九|