久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

SpringBoot集成SpringSecurity和JWT做登陸鑒權的實現

瀏覽:39日期:2023-05-22 17:39:39

廢話

目前流行的前后端分離讓Java程序員可以更加專注的做好后臺業務邏輯的功能實現,提供如返回Json格式的數據接口就可以。SpringBoot的易用性和對其他框架的高度集成,用來快速開發一個小型應用是最佳的選擇。

一套前后端分離的后臺項目,剛開始就要面對的就是登陸和授權的問題。這里提供一套方案供大家參考。

主要看點:

登陸后獲取token,根據token來請求資源 根據用戶角色來確定對資源的訪問權限 統一異常處理 返回標準的Json格式數據

正文

首先是pom文件:

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!--這是不是必須,只是我引用了里面一些類的方法--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-solr</artifactId> </dependency><!--這是不是必須,只是我引用了里面一些類的方法--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.6.1</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.6.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-jwt</artifactId> <version>1.0.9.RELEASE</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>

application.yml:

spring : datasource : url : jdbc:mysql://127.0.0.1:3306/les_data_center?useUnicode=true&amp;characterEncoding=UTF-8&allowMultiQueries=true&useAffectedRows=true&useSSL=false username : root password : 123456 driverClassName : com.mysql.jdbc.Driver jackson: data-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8mybatis : config-location : classpath:/mybatis-config.xml# JWTjwt: header: Authorization secret: mySecret #token有效期一天 expiration: 86400 tokenHead: 'Bearer '

接著是對security的配置,讓security來保護我們的API

SpringBoot推薦使用配置類來代替xml配置。那這里,我也使用配置類的方式。

@Configuration@EnableWebSecurity@EnableGlobalMethodSecurity(prePostEnabled = true)public class WebSecurityConfig extends WebSecurityConfigurerAdapter { private final JwtAuthenticationEntryPoint unauthorizedHandler; private final AccessDeniedHandler accessDeniedHandler; private final UserDetailsService CustomUserDetailsService; private final JwtAuthenticationTokenFilter authenticationTokenFilter; @Autowired public WebSecurityConfig(JwtAuthenticationEntryPoint unauthorizedHandler, @Qualifier('RestAuthenticationAccessDeniedHandler') AccessDeniedHandler accessDeniedHandler, @Qualifier('CustomUserDetailsService') UserDetailsService CustomUserDetailsService, JwtAuthenticationTokenFilter authenticationTokenFilter) { this.unauthorizedHandler = unauthorizedHandler; this.accessDeniedHandler = accessDeniedHandler; this.CustomUserDetailsService = CustomUserDetailsService; this.authenticationTokenFilter = authenticationTokenFilter; } @Autowired public void configureAuthentication(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception { authenticationManagerBuilder// 設置UserDetailsService.userDetailsService(this.CustomUserDetailsService)// 使用BCrypt進行密碼的hash.passwordEncoder(passwordEncoder()); } // 裝載BCrypt密碼編碼器 @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Override protected void configure(HttpSecurity httpSecurity) throws Exception { httpSecurity.exceptionHandling().accessDeniedHandler(accessDeniedHandler).and()// 由于使用的是JWT,我們這里不需要csrf.csrf().disable().exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()// 基于token,所以不需要session.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests()// 對于獲取token的rest api要允許匿名訪問.antMatchers('/api/v1/auth', '/api/v1/signout', '/error/**', '/api/**').permitAll()// 除上面外的所有請求全部需要鑒權認證.anyRequest().authenticated(); // 禁用緩存 httpSecurity.headers().cacheControl(); // 添加JWT filter httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class); } @Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers('/v2/api-docs','/swagger-resources/configuration/ui','/swagger-resources','/swagger-resources/configuration/security','/swagger-ui.html' ); } @Bean @Override public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); }}

該類中配置了幾個bean來供security使用。

JwtAuthenticationTokenFilter:token過濾器來驗證token有效性 UserDetailsService:實現了DetailsService接口,用來做登陸驗證 JwtAuthenticationEntryPoint :認證失敗處理類 RestAuthenticationAccessDeniedHandler: 權限不足處理類

那么,接下來一個一個實現這些類:

/** * token校驗,引用的stackoverflow一個答案里的處理方式 * Author: JoeTao * createAt: 2018/9/14 */@Componentpublic class JwtAuthenticationTokenFilter extends OncePerRequestFilter { @Value('${jwt.header}') private String token_header; @Resource private JWTUtils jwtUtils; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { String auth_token = request.getHeader(this.token_header); final String auth_token_start = 'Bearer '; if (StringUtils.isNotEmpty(auth_token) && auth_token.startsWith(auth_token_start)) { auth_token = auth_token.substring(auth_token_start.length()); } else { // 不按規范,不允許通過驗證 auth_token = null; } String username = jwtUtils.getUsernameFromToken(auth_token); logger.info(String.format('Checking authentication for user %s.', username)); if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) { User user = jwtUtils.getUserFromToken(auth_token); if (jwtUtils.validateToken(auth_token, user)) {UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(user, null, user.getAuthorities());authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));logger.info(String.format('Authenticated user %s, setting security context', username));SecurityContextHolder.getContext().setAuthentication(authentication); } } chain.doFilter(request, response); }}

/** * 認證失敗處理類,返回401 * Author: JoeTao * createAt: 2018/9/20 */@Componentpublic class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint, Serializable { private static final long serialVersionUID = -8970718410437077606L; @Override public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException { //驗證為未登陸狀態會進入此方法,認證錯誤 System.out.println('認證失敗:' + authException.getMessage()); response.setStatus(200); response.setCharacterEncoding('UTF-8'); response.setContentType('application/json; charset=utf-8'); PrintWriter printWriter = response.getWriter(); String body = ResultJson.failure(ResultCode.UNAUTHORIZED, authException.getMessage()).toString(); printWriter.write(body); printWriter.flush(); }}

因為我們使用的REST API,所以我們認為到達后臺的請求都是正常的,所以返回的HTTP狀態碼都是200,用接口返回的code來確定請求是否正常。

/*** 權限不足處理類,返回403 * Author: JoeTao * createAt: 2018/9/21 */@Component('RestAuthenticationAccessDeniedHandler')public class RestAuthenticationAccessDeniedHandler implements AccessDeniedHandler { @Override public void handle(HttpServletRequest httpServletRequest, HttpServletResponse response, AccessDeniedException e) throws IOException, ServletException { //登陸狀態下,權限不足執行該方法 System.out.println('權限不足:' + e.getMessage()); response.setStatus(200); response.setCharacterEncoding('UTF-8'); response.setContentType('application/json; charset=utf-8'); PrintWriter printWriter = response.getWriter(); String body = ResultJson.failure(ResultCode.FORBIDDEN, e.getMessage()).toString(); printWriter.write(body); printWriter.flush(); }}

/** * 登陸身份認證 * Author: JoeTao * createAt: 2018/9/14 */@Component(value='CustomUserDetailsService')public class CustomUserDetailsService implements UserDetailsService { private final AuthMapper authMapper; public CustomUserDetailsService(AuthMapper authMapper) { this.authMapper = authMapper; } @Override public User loadUserByUsername(String name) throws UsernameNotFoundException { User user = authMapper.findByUsername(name); if (user == null) { throw new UsernameNotFoundException(String.format('No user found with username ’%s’.', name)); } Role role = authMapper.findRoleByUserId(user.getId()); user.setRole(role); return user; }}

登陸邏輯:

public ResponseUserToken login(String username, String password) { //用戶驗證 final Authentication authentication = authenticate(username, password); //存儲認證信息 SecurityContextHolder.getContext().setAuthentication(authentication); //生成token final User user = (User) authentication.getPrincipal();// User user = (User) userDetailsService.loadUserByUsername(username); final String token = jwtTokenUtil.generateAccessToken(user); //存儲token jwtTokenUtil.putToken(username, token); return new ResponseUserToken(token, user); }private Authentication authenticate(String username, String password) { try { //該方法會去調用userDetailsService.loadUserByUsername()去驗證用戶名和密碼,如果正確,則存儲該用戶名密碼到“security 的 context中” return authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password)); } catch (DisabledException | BadCredentialsException e) { throw new CustomException(ResultJson.failure(ResultCode.LOGIN_ERROR, e.getMessage())); } }

自定義異常:

@Getterpublic class CustomException extends RuntimeException{ private ResultJson resultJson; public CustomException(ResultJson resultJson) { this.resultJson = resultJson; }}

統一異常處理:

/** * 異常處理類 * controller層異常無法捕獲處理,需要自己處理 * Created by jt on 2018/8/27. */@RestControllerAdvice@Slf4jpublic class DefaultExceptionHandler { /** * 處理所有自定義異常 * @param e * @return */ @ExceptionHandler(CustomException.class) public ResultJson handleCustomException(CustomException e){ log.error(e.getResultJson().getMsg().toString()); return e.getResultJson(); }}

所有經controller轉發的請求拋出的自定義異常都會被捕獲處理,一般情況下就是返回給調用方一個json的報錯信息,包含自定義狀態碼、錯誤信息及補充描述信息。

值得注意的是,在請求到達controller之前,會被Filter攔截,如果在controller或者之前拋出的異常,自定義的異常處理器是無法處理的,需要自己重新定義一個全局異常處理器或者直接處理。

Filter攔截請求兩次的問題

跨域的post的請求會驗證兩次,get不會。網上的解釋是,post請求第一次是預檢請求,Request Method: OPTIONS。解決方法:

在webSecurityConfig里添加

.antMatchers(HttpMethod.OPTIONS, '/**').permitAll()

就可以不攔截options請求了。

這里只給出了最主要的代碼,還有controller層的訪問權限設置,返回狀態碼,返回類定義等等。

所有代碼已上傳GitHub,項目地址

到此這篇關于SpringBoot集成SpringSecurity和JWT做登陸鑒權的實現的文章就介紹到這了,更多相關SpringBoot JWT 登陸鑒權內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 午夜免费观看网站 | 国产精品一区二区久久久 | 中文字幕在线观看视频一区 | 999精品免费| 国产日韩精品在线观看 | 国产精品三级久久久久久电影 | 亚洲欧美一区二区三区在线 | 亚洲性人人天天夜夜摸 | 久久久精品国产 | 亚洲第一性理论片 | 日韩在线高清视频 | 男人天堂亚洲天堂 | 亚洲色图一区二区三区 | 久久免费福利视频 | 亚洲第一成年免费网站 | 在线观看亚洲一区二区三区 | 欧美一级免费高清 | 91免费在线播放 | 久久久久一区二区 | 亚洲欧美日韩在线 | 久久久久久免费毛片精品 | 蜜桃一区 | 玖玖色资源| 中文字幕视频在线观看 | 黄色一级网址 | 欧美精品久久久久久久久 | 国产aⅴ一区二区 | 国产高清精品一区二区三区 | 久久久久久久久国产精品 | 亚洲国产精品第一区二区 | 成人在线小视频 | 性色av一区二区三区 | 国产精品乱码一区二区三区 | 夜夜春精品视频高清69式 | 国产xxx护士爽免费看 | 成人精品视频在线 | 亚洲精品在线免费看 | 日韩成人在线看 | 一区二区免费播放 | www.色综合 | 一区二区三区精品视频 | 午夜少妇av| 黄片毛片一级 | 亚洲成人av电影 | 国产91在线观看 | 日韩一区二区不卡 | 中文字幕一区二区三区四区 | 久在线| 午夜精品网站 | 精品护士一区二区三区 | 久久精品一| 成人免费一区二区三区视频网站 | 欧美激情在线免费观看 | 欧美一区二区三区精品 | 国产精品美女视频免费观看软件 | 亚洲精品一区二三区不卡 | 狠狠操操操 | 欧美亚洲一区二区三区 | 亚洲欧美视频一区 | 欧美顶级毛片在线播放 | 一级毛片观看 | 国产一区不卡视频 | 夜夜春精品视频高清69式 | 国产色播av在线 | 不卡一区| 台湾佬成人 | 精品在线视频一区 | 精品成人久久 | 黄色精品视频 | 蜜桃视频网站在线观看 | 97视频免费在线观看 | 久久精品中文字幕 | 情一色一乱一欲一区二区 | 午夜免费福利视频 | 欧美视频网站 | 久久高清| 中文字幕天堂在线 | 亚洲国产精品第一区二区 | 亚洲福利社区 | 日韩av在线一区二区三区 | 亚洲精品7777xxxx青睐 | 北条麻妃一区二区三区中文字幕 | 午夜免费影视 | 日韩欧美一级精品久久 | 欧美国产日韩一区 | 欧美日本一区 | 成人av教育 | 日韩av免费在线播放 | 狠狠干网站 | 狠狠躁夜夜躁人人爽天天高潮 | 精品免费久久久久久久苍 | 97av在线视频 | 91精品国产91久久久久久久久久久久 | 亚洲国产精品人人爽夜夜爽 | 国产精品日韩在线观看 | 色婷婷综合久久久中文字幕 | 久久在线| 亚洲一区二区在线播放 | 精品久久久久久久久久久久 | 亚洲欧美日韩国产 | 中文字幕国产视频 | 欧美日韩黄色一级片 | 久久久国产视频 | 91视频免费观看 | 欧美日韩中文字幕 | 精品免费国产视频 | 九九热视频在线 | 午夜精品久久久久久久白皮肤 | 视频一区 中文字幕 | 国产区视频在线观看 | 91精品国产一区二区三区香蕉 | 伊人影院在线观看 | 日韩精品一区二区三区在线 | 美日韩一区二区 | 搡女人真爽免费午夜网站 | 极品女神高潮呻吟av久久 | 久操伊人 | 日韩视频在线不卡 | 一级毛片免费看 | 国产精品永久在线 | 欧美日韩一区二区三区在线观看 | 国产一区在线不卡 | 日本在线播放 | av网站在线免费观看 | 免费h| 看羞羞视频免费 | 国产一级特黄aaa大片 | 日韩中文在线 | 久久国产精品无码网站 | 91中文字幕在线观看 | 日韩成人小视频 | 久久狠狠 | 日韩成人在线观看视频 | 欧美成人性生活视频 | 久草在线视频免费播放 | 99re在线观看 | 免费在线观看一级毛片 | 欧美日韩在线一区 | 久草免费福利 | 伊人网综合视频 | 99热福利| 国产午夜精品一区二区三区嫩草 | 午夜影院在线观看版 | 亚洲男人的天堂在线观看 | 欧美一a一片一级一片 | 日韩欧在线 | 97在线视频免费 | 精品欧美视频 | 久久综合久久久 | 欧美在线观看一区 | av在线免费观看一区二区 | 中文字幕成人 | 视频在线一区 | 亚洲区视频| 一本久久a久久精品亚洲 | 成人午夜视频在线 | www.you日本 | 龙珠z在线观看 | 欧美一级片免费看 | 日韩在线观看视频一区二区 | 亚洲精品大片 | 日韩成年视频 | 国产精品第一国产精品 | 精久久久 | 欧美极品欧美精品欧美视频 | 中文字幕一区二区三区四区不卡 | 亚洲不卡免费视频 | 成人国产精品久久 | 国产亚洲欧美在线 | 欧美在线亚洲 | 亚洲精品成人av | 在线久| 欧美色视频在线观看 | 欧美日韩不卡在线 | 一级片日韩 | av成人在线观看 | 久草网在线视频 | 久久精品亚洲 | 精品欧美一区二区三区久久久 | 国产成人精品久久二区二区 | 男女视频在线 | 精品在线视频观看 | 九九视频网 | 欧美日韩在线免费 | 伊人狠狠 | 国产精品久久久久久久久久久久久久 | 精品福利av导航 | 亚洲二区在线 | 亚洲第一视频网站 | 青青草视频免费观看 | 一区二区三区自拍 | 国产一区二区三区在线 | 久久久久久久久国产成人免费 | 国产精品美女久久久久久久久久久 | 欧美精品免费在线观看 | 中文字幕免费在线 | 国产精品极品美女在线观看免费 | 人人插人人干 | 国产精品视频久久 | 精品国产依人香蕉在线精品 | 久久线视频 | 欧美日韩一区二区三区在线电影 | 自拍视频网站 | 黄网免费 | 国产精品毛片久久久久久 | 91午夜精品一区二区三区 | 久久久久精| av动漫一区二区 | 99热.com| 伊人网站| 中文字幕乱码亚洲精品一区 | 亚洲精品资源在线观看 | 久久精品国产亚卅av嘿嘿 | 亚洲欧美激情精品一区二区 | 亚洲天堂一区 | a毛片毛片av永久免费 | 狠狠插狠狠操 | 欧美 日韩 国产 一区 | 四季久久免费一区二区三区四区 | 欧美日韩成人在线播放 | 日韩国产在线观看 | 在线观看不卡一区 | 国产乱码精品一区二区三区中文 | 国产精品一区二区在线观看 | jizz欧美大片 | 欧美色欧美亚洲另类七区 | 天天躁人人躁人人躁狂躁 | 日本69视频| 老牛影视av一区二区在线观看 | 亚洲国产成人在线 | 午夜日韩 | 亚洲视频在线观看免费 | 国产精品久久 | 91尤物网站网红尤物福利 | 日日夜夜天天 | 亚洲精品国产高清 | 精品久久精品久久 | 成人av片在线观看 | 日韩一二三区 | 婷婷免费在线观看 | 成人免费一区二区三区视频软件 | 亚洲精品一区二区三区蜜桃久 | 欧美精品一区二区三区蜜臀 | 国产精品一区二区三区四区 | 中文亚洲欧美 | 日本欧美久久久久免费播放网 | 国产精品久久久久久久久久三级 | 精品国偷自产国产一区 | 午夜影院免费 | av网站在线免费看 | 国内av网站 | av成人在线观看 | 99视频网| 日韩av电影在线免费观看 | 日韩在线精品 | 精品一区二区三区三区 | 国产成人激情 | 国产精品国产 | www.一区二区 | 亚洲福利精品视频 | 日韩一二区视频 | 在线观看成人小视频 | 欧美日韩精品网站 | 天堂va在线高清一区 | av一区在线观看 | 成人a网 | 欧美日韩在线看 | 亚洲视频在线免费观看 | 999国产一区二区三区四区 | 一区二区三区在线观看国产 | 麻豆久久 | 色就是色欧美 | 久草在线青青草 | 91激情视频| 亚洲欧洲日韩 | 久久视频在线 | 这里只有精品在线视频观看 | 国产精品毛片无码 | 99国内精品久久久久久久 | 亚洲一区电影 | 亚洲精品午夜国产va久久成人 | 成人免费视频网站在线观看 | 日韩在线高清视频 | 中文字幕综合 | 国产免费拔擦拔擦8x高清在线人 | 成人午夜av| 欧美成人一区二区三区片免费 | 欧美成年黄网站色视频 | 国产做a| 成人av一区二区三区 | 午夜在线视频 | 一区二区三区在线免费 | 91视频网| 色在线看 | 欧美一级淫片免费视频黄 | 国产精品99久久久久久久久久久久 | 久久国产精品免费一区二区三区 | 精品久久中文 | 国产精品一二区 | 天天插天天操 | 午夜网址 | 美女一级a毛片免费观看97 | 亚洲免费精品 | 国产一级片播放 | 天久久| 亚洲精品一区二区三区蜜桃久 | 日韩视频中文字幕 | 久久久亚洲一区二区三区 | 国产成人午夜视频 | 成人在线不卡 | 欧美电影一区二区三区 | 久久精品一 | 色xx综合网 | 国产大学生援交视频在线观看 | 久久精品一 | 亚洲一区二区三区在线观看免费 | 国产一区二区三区免费看 | 色综合天天 | 九九热热九九 | 日韩综合视频在线观看 | 国产精品一区二区三 | av国产精品 | 欧美激情一区二区三区在线视频 | 香蕉大人久久国产成人av | 狠狠久久婷婷 | 欧美不卡 | 伊人网综合视频 | 欧美黄色片 | 久久久成人精品视频 | 91久久久久久久久 | 日韩国产欧美亚洲 | 免费国产一区 | 91精品国产综合久久久久久漫画 | 久久久久国产一区二区三区 | 国产精品久久久久久久久免费桃花 | 黄色电影天堂 | 资源av| 欧美福利网址 | 欧美视频一区二区三区在线观看 | 精品国产第一国产综合精品 | 91精品久久久久久久久中文字幕 | 国产精品久久久久久久久免费高清 | 成人免费视频观看视频 | 久久美女视频 | 中文字幕在线观看av | 国产亚洲一区二区三区 | 亚洲一区免费在线观看 | 九九九九九九精品任你躁 | 欧美日韩电影一区二区三区 | 久久国产精品免费一区二区三区 | 成年人视频在线观看免费 | 久久久久久久久一区二区三区 | 天堂网中文在线 | 伊人一区| 久草久 | 亚洲激情av| 亚洲精品在线看 | 天天碰天天操 | 日本中文字幕一区二区 | 99久久精品国产一区二区成人 | 免费看a | 国产日韩一区二区三区 | 欧美黄色一区 | 国产精品1| 美女天堂 | 久久中文字幕视频 | 亚洲乱码一区二区三区在线观看 | 亚洲不卡在线 | 亚洲精品乱码 | 欧美一区亚洲二区 | 亚洲欧美日韩国产综合 | 亚洲视频在线免费观看 | 你懂的免费在线观看 | 成人在线免费电影 | h在线看 | 精品欧美一区二区三区久久久小说 | 日韩欧美在线一区 | 欧美精品欧美精品系列 | 国产亚洲网站 | 一级黄色录像在线观看 | 天天干天天骑 | 国产免费黄色大片 | 一级毛片,一级毛片 | 成人欧美一区二区三区 | 免费一区二区 | 91免费观看视频 | 国产精品亚洲一区 | 欧美影 | 91社影院在线观看 | 日韩一区二区视频 | 中文视频在线 | 免费黄色大片 | 欧美一区二区三区国产精品 | 国产精品精品视频一区二区三区 | 中文字幕视频在线播放 | 国产精品国色综合久久 | 欧美日韩在线观看中文字幕 | 亚洲精品福利 | 亚洲精品成人 | 精品国产不卡一区二区三区 | 久久久久久毛片免费播放 | 欧美猛交ⅹxxx乱大交视频 | 91亚洲狠狠婷婷综合久久久 | 太子妃好紧皇上好爽h | 国产精品久久久久久久久久东京 | 精品久久久久久久久久久 | 国产精品久久久久久久久久东京 | 男女中文字幕 | 国产伊人一区 | 久久久久久av | 黄久久久 | 午夜精品久久久久久久 | 亚洲精品一区二区 | 久久久久国产成人精品亚洲午夜 | 免费av在线网站 | 国产视频精品视频 | 亚洲h视频在线观看 | 国产欧美精品一区二区三区四区 | 午夜婷婷色 | 亚洲视频一区二区三区 | 成年人网站在线免费看 | 精品国模一区二区三区欧美 | 久久久精品网 | 欧美精品久 | 欧美精品99 | 91成人在线看 | 99热精品在线 | 精品欧美乱码久久久久久1区2区 | 日本中文字幕电影 | 日日操天天射 | 日韩视频在线观看视频 | 久久久久无码国产精品一区 | 999热在线| 久久精品免费一区二区三区 | 国产精品欧美日韩 | 国户精品久久久久久久久久久不卡 | 在线精品一区 | 欧美一级免费播放 | jizz在线观看| 午夜男人天堂 | 国产精品自拍一区 | 亚洲综合欧美 | 亚洲 欧美日韩 国产 中文 | 老司机福利在线视频 | 国产精品久久久精品 | 一区二区三区国产视频 | 污污视频免费网站 | 一区二区三区欧美 | 91免费影视 | 亚洲二区视频 | 久久久久久久久国产精品 | 婷婷久久综合 | 日韩成人免费在线 | 色婷婷综合久色 | 久久一区二区精品 | 国产一级特黄毛片在线毛片 | 亚洲精品乱码久久久久膏 | 中文字幕三区 | 中文字幕一区二区三区四区 | 成人综合在线观看 | 国产成人av一区二区 | 国产亚洲精品精品国产亚洲综合 | 欧美激情网址 | 成人黄色片在线观看 | 亚洲精品久久久久久久久久久久久 | 亚洲精品一二三区 | 最新国产在线 | 亚洲国产成人av好男人在线观看 | 欧美99热 | 性视频一区二区 | 久久国产精品免费一区二区三区 | 亚洲免费网站在线观看 | 欧美精品一区二区三区四区在线 | 成年人在线观看 | 天天干天天插 | 亚洲天堂男人 | 日本亚洲精品成人欧美一区 | 国产精品久久久久一区二区三区 | 日韩在线视频播放 | 久久成人一区 | 亚洲精品国产setv | 91短视频版在线观看免费大全 | 天天天综合网 | 亚洲高清免费 | 9999国产精品| 欧美日韩精品亚洲 | 久久小视频 | 免费精品视频 | 欧美二区精品 | 亚洲乱码一区二区三区在线观看 | 中文精品在线 | 免费午夜电影 | 亚洲综合中文网 | 一卡二卡久久 | 日韩欧美在线视频免费观看 | 网站av | 久久精品亚洲一区二区 | 涩涩视频在线观看 | 国产美女永久免费无遮挡 | 黄色毛片免费看 | 草草久久久 | 国产精品成人3p一区二区三区 | 日韩成人 | 午夜电影在线看 | 精品久久久久久久久久久久久久久 | 久草精品在线观看 | 国产精品一区二区视频 | 亚洲精品国产9999久久久久 | 在线影院av| 日韩国产一区二区 | 免费在线视频精品 | 国产一区视频网站 | 久久久久国产精品 | 黄色成人在线网站 | 国产在线观看一区 | 中文字幕一区二区三区不卡 | 欧美日韩视频一区二区 | 欧美日韩在线免费观看 | 99精品欧美一区二区蜜桃免费 | 日韩av在线中文字幕 | 视频1区 | 久久6 | 久久999| 国产乱码精品1区2区3区 | 国产成人一区 | 黄频免费在线观看 | 国产亚洲一区二区精品 | 成人午夜视频在线观看 | 精品国产一区二区三区日日嗨 | 欧美 日韩 中文 | 色优久久 | 国产一区二区三区免费 | 看毛片网| av激情在线| 日韩9999| 国产欧美日韩综合精品一 | 国产精品久久久久久久久 | 日韩久久精品 | 操操操影院 | 中文字幕一区二区三区乱码图片 | av男人的天堂网 | 中文字幕在线一区 | 一区二区三区不卡视频 | 欧美亚洲国产一区 | 在线免费观看成年人视频 | 免费在线黄色av | 一区二区三区在线播放视频 | 蜜桃视频一区二区三区 | 日韩在线播放一区二区三区 | 久久精品免费一区二区 | 久久视频在线看 | 91亚洲国产精品 | 日韩一区电影 | 国产精品福利一区 | 一区二区三区自拍 | 欧美精品第一页 | 久久久高清 | 国产在线观看免费 | 国产传媒毛片精品视频第一次 | 日韩一区欧美 | 少妇黄色一级片 | 国产精品18久久久久久久久久久久 | 日本一二三视频 | 蜜桃av一区二区三区 | 精品久久久久久久久久久 | 欧美精品综合 | 日韩欧美在线不卡 | 久久精品欧美一区二区三区不卡 | 国产福利在线免费 | 欧美成人高清视频 | 午夜精品久久久久久99热软件 | 天天操操 | 国产精品爱久久久久久久 | 国产精品视频久久久 | 亚洲视频在线观看 | 亚洲国产精品久久人人爱 | 日韩激情免费视频 | 久久久国产精品入口麻豆 | 欧美一区二区久久 | 麻豆精品一区二区 | 白浆在线播放 | 九九视频网 | 久久久久久这里只有精品 | 国产综合精品 | 亚洲视频免费观看 | 在线视频二区 | 性生活毛片| 国产女爽爽视频精品免费 | 91男女视频 | 中文亚洲欧美 | 午夜精品久久久久 | 亚洲在线 | 国产精品久久久久久久福利院 | 国产日韩欧美一区 | 国产成人福利在线 | 99看片 | 国产一二三区在线观看 | 伊人色综合久久久天天蜜桃 | 在线观看免费的网站www | 欧美一区在线视频 | 国产精品久久久久久久久久久久久久 | 国产成人精品一区二区三区四区 | 99国产精品久久久久久久 | 亚洲欧美日韩电影 | 91精品中文字幕一区二区三区 | 亚洲免费网站 | 激情一区 | 成人深夜福利视频 | 日韩三区视频 | 亚洲精品久久久一区二区三区 | 亚洲精品一区二区三区 | 日韩中文一区二区 | 蜜桃一区二区 | 在线小视频 | 伊人手机在线视频 |