日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

为MongoDB定制Spring Social Connect框架

發布時間:2023/12/3 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为MongoDB定制Spring Social Connect框架 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在上一篇文章中 ,我談到了我面臨的第一個挑戰是更改數據模型并添加連接框架。 在這里,我想提供有關我如何做的更多細節。 Spring Social項目已經提供了基于jdbc的連接存儲庫實現,以將用戶連接數據持久保存到關系數據庫中。 但是,我使用的是MongoDB,因此我需要自定義代碼,并且發現這樣做相對容易。 用戶連接數據將保存為UserSocialConnection的對象,它是一個MongoDB文檔:

@SuppressWarnings('serial') @Document(collection = 'UserSocialConnection') public class UserSocialConnection extends BaseEntity {private String userId;private String providerId;private String providerUserId;private String displayName;private String profileUrl;private String imageUrl;private String accessToken;private String secret;private String refreshToken;private Long expireTime;//Getter/Setter omitted.public UserSocialConnection() {super();}public UserSocialConnection(String userId, String providerId, String providerUserId, int rank,String displayName, String profileUrl, String imageUrl, String accessToken, String secret,String refreshToken, Long expireTime) {super();this.userId = userId;this.providerId = providerId;this.providerUserId = providerUserId;this.displayName = displayName;this.profileUrl = profileUrl;this.imageUrl = imageUrl;this.accessToken = accessToken;this.secret = secret;this.refreshToken = refreshToken;this.expireTime = expireTime;} }

BaseEntity僅具有“ id”。 在Spring Data項目的幫助下,我不需要為UserSocialConnection編寫任何CRUD操作代碼,只需擴展MongoRepository :

public interface UserSocialConnectionRepository extends MongoRepository<UserSocialConnection, String>{List<UserSocialConnection> findByUserId(String userId);List<UserSocialConnection> findByUserIdAndProviderId(String userId, String providerId);List<UserSocialConnection> findByProviderIdAndProviderUserId(String providerId, String providerUserId);UserSocialConnection findByUserIdAndProviderIdAndProviderUserId(String userId, String providerId, String providerUserId);List<UserSocialConnection> findByProviderIdAndProviderUserIdIn(String providerId, Collection<String> providerUserIds); }

在擁有數據庫UserSocialConnectionRepository ,我們將實現Spring Social所需的ConnectionRepository和UsersConnectionRepository 。 我只是從JdbcConnectionRepository和JdbcUsersConnectionRepository復制了代碼,并創建了自己的MongoConnectionRepository和MongoUsersConnectionRepository 。

public class MongoUsersConnectionRepository implements UsersConnectionRepository{private final UserSocialConnectionRepository userSocialConnectionRepository;private final SocialAuthenticationServiceLocator socialAuthenticationServiceLocator;private final TextEncryptor textEncryptor;private ConnectionSignUp connectionSignUp;public MongoUsersConnectionRepository(UserSocialConnectionRepository userSocialConnectionRepository, SocialAuthenticationServiceLocator socialAuthenticationServiceLocator, TextEncryptor textEncryptor){this.userSocialConnectionRepository = userSocialConnectionRepository;this.socialAuthenticationServiceLocator = socialAuthenticationServiceLocator;this.textEncryptor = textEncryptor;}/*** The command to execute to create a new local user profile in the event no user id could be mapped to a connection.* Allows for implicitly creating a user profile from connection data during a provider sign-in attempt.* Defaults to null, indicating explicit sign-up will be required to complete the provider sign-in attempt.* @see #findUserIdsWithConnection(Connection)*/public void setConnectionSignUp(ConnectionSignUp connectionSignUp) {this.connectionSignUp = connectionSignUp;}public List<String> findUserIdsWithConnection(Connection<?> connection) {ConnectionKey key = connection.getKey();List<UserSocialConnection> userSocialConnectionList = this.userSocialConnectionRepository.findByProviderIdAndProviderUserId(key.getProviderId(), key.getProviderUserId());List<String> localUserIds = new ArrayList<String>();for (UserSocialConnection userSocialConnection : userSocialConnectionList){localUserIds.add(userSocialConnection.getUserId());}if (localUserIds.size() == 0 && connectionSignUp != null) {String newUserId = connectionSignUp.execute(connection);if (newUserId != null){createConnectionRepository(newUserId).addConnection(connection);return Arrays.asList(newUserId);}}return localUserIds;}public Set<String> findUserIdsConnectedTo(String providerId, Set<String> providerUserIds) {final Set<String> localUserIds = new HashSet<String>();List<UserSocialConnection> userSocialConnectionList = this.userSocialConnectionRepository.findByProviderIdAndProviderUserIdIn(providerId, providerUserIds);for (UserSocialConnection userSocialConnection : userSocialConnectionList){localUserIds.add(userSocialConnection.getUserId());}return localUserIds;}public ConnectionRepository createConnectionRepository(String userId) {if (userId == null) {throw new IllegalArgumentException('userId cannot be null');}return new MongoConnectionRepository(userId, userSocialConnectionRepository, socialAuthenticationServiceLocator, textEncryptor);}}

MongoUsersConnectionRepository非常類似于JdbcUsersConnectionRepository 。 但是對于MongoConnectionRepository ,我需要進行一些更改:

public class MongoConnectionRepository implements ConnectionRepository {private final String userId;private final UserSocialConnectionRepository userSocialConnectionRepository;private final SocialAuthenticationServiceLocator socialAuthenticationServiceLocator;private final TextEncryptor textEncryptor;public MongoConnectionRepository(String userId, UserSocialConnectionRepository userSocialConnectionRepository,SocialAuthenticationServiceLocator socialAuthenticationServiceLocator, TextEncryptor textEncryptor) {this.userId = userId;this.userSocialConnectionRepository = userSocialConnectionRepository;this.socialAuthenticationServiceLocator = socialAuthenticationServiceLocator;this.textEncryptor = textEncryptor;}public MultiValueMap<String, Connection<?>> findAllConnections() {List<UserSocialConnection> userSocialConnectionList = this.userSocialConnectionRepository.findByUserId(userId);MultiValueMap<String, Connection<?>> connections = new LinkedMultiValueMap<String, Connection<?>>();Set<String> registeredProviderIds = socialAuthenticationServiceLocator.registeredProviderIds();for (String registeredProviderId : registeredProviderIds) {connections.put(registeredProviderId, Collections.<Connection<?>> emptyList());}for (UserSocialConnection userSocialConnection : userSocialConnectionList) {String providerId = userSocialConnection.getProviderId();if (connections.get(providerId).size() == 0) {connections.put(providerId, new LinkedList<Connection<?>>());}connections.add(providerId, buildConnection(userSocialConnection));}return connections;}public List<Connection<?>> findConnections(String providerId) {List<Connection<?>> resultList = new LinkedList<Connection<?>>();List<UserSocialConnection> userSocialConnectionList = this.userSocialConnectionRepository.findByUserIdAndProviderId(userId, providerId);for (UserSocialConnection userSocialConnection : userSocialConnectionList) {resultList.add(buildConnection(userSocialConnection));}return resultList;}@SuppressWarnings('unchecked')public <A> List<Connection<A>> findConnections(Class<A> apiType) {List<?> connections = findConnections(getProviderId(apiType));return (List<Connection<A>>) connections;}public MultiValueMap<String, Connection<?>> findConnectionsToUsers(MultiValueMap<String, String> providerUsers) {if (providerUsers == null || providerUsers.isEmpty()) {throw new IllegalArgumentException('Unable to execute find: no providerUsers provided');}MultiValueMap<String, Connection<?>> connectionsForUsers = new LinkedMultiValueMap<String, Connection<?>>();for (Iterator<Entry<String, List<String>>> it = providerUsers.entrySet().iterator(); it.hasNext();) {Entry<String, List<String>> entry = it.next();String providerId = entry.getKey();List<String> providerUserIds = entry.getValue();List<UserSocialConnection> userSocialConnections = this.userSocialConnectionRepository.findByProviderIdAndProviderUserIdIn(providerId, providerUserIds);List<Connection<?>> connections = new ArrayList<Connection<?>>(providerUserIds.size());for (int i = 0; i < providerUserIds.size(); i++) {connections.add(null);}connectionsForUsers.put(providerId, connections);for (UserSocialConnection userSocialConnection : userSocialConnections) {String providerUserId = userSocialConnection.getProviderUserId();int connectionIndex = providerUserIds.indexOf(providerUserId);connections.set(connectionIndex, buildConnection(userSocialConnection));}}return connectionsForUsers;}public Connection<?> getConnection(ConnectionKey connectionKey) {UserSocialConnection userSocialConnection = this.userSocialConnectionRepository.findByUserIdAndProviderIdAndProviderUserId(userId, connectionKey.getProviderId(),connectionKey.getProviderUserId());if (userSocialConnection != null) {return buildConnection(userSocialConnection);}throw new NoSuchConnectionException(connectionKey);}@SuppressWarnings('unchecked')public <A> Connection<A> getConnection(Class<A> apiType, String providerUserId) {String providerId = getProviderId(apiType);return (Connection<A>) getConnection(new ConnectionKey(providerId, providerUserId));}@SuppressWarnings('unchecked')public <A> Connection<A> getPrimaryConnection(Class<A> apiType) {String providerId = getProviderId(apiType);Connection<A> connection = (Connection<A>) findPrimaryConnection(providerId);if (connection == null) {throw new NotConnectedException(providerId);}return connection;}@SuppressWarnings('unchecked')public <A> Connection<A> findPrimaryConnection(Class<A> apiType) {String providerId = getProviderId(apiType);return (Connection<A>) findPrimaryConnection(providerId);}public void addConnection(Connection<?> connection) {//check cardinalitySocialAuthenticationService<?> socialAuthenticationService = this.socialAuthenticationServiceLocator.getAuthenticationService(connection.getKey().getProviderId());if (socialAuthenticationService.getConnectionCardinality() == ConnectionCardinality.ONE_TO_ONE ||socialAuthenticationService.getConnectionCardinality() == ConnectionCardinality.ONE_TO_MANY){List<UserSocialConnection> storedConnections = this.userSocialConnectionRepository.findByProviderIdAndProviderUserId(connection.getKey().getProviderId(), connection.getKey().getProviderUserId());if (storedConnections.size() > 0){//not allow one providerId connect to multiple userIdthrow new DuplicateConnectionException(connection.getKey());}}UserSocialConnection userSocialConnection = this.userSocialConnectionRepository.findByUserIdAndProviderIdAndProviderUserId(userId, connection.getKey().getProviderId(), connection.getKey().getProviderUserId());if (userSocialConnection == null) {ConnectionData data = connection.createData();userSocialConnection = new UserSocialConnection(userId, data.getProviderId(), data.getProviderUserId(), 0,data.getDisplayName(), data.getProfileUrl(), data.getImageUrl(), encrypt(data.getAccessToken()),encrypt(data.getSecret()), encrypt(data.getRefreshToken()), data.getExpireTime());this.userSocialConnectionRepository.save(userSocialConnection);} else {throw new DuplicateConnectionException(connection.getKey());}}public void updateConnection(Connection<?> connection) {ConnectionData data = connection.createData();UserSocialConnection userSocialConnection = this.userSocialConnectionRepository.findByUserIdAndProviderIdAndProviderUserId(userId, connection.getKey().getProviderId(), connection.getKey().getProviderUserId());if (userSocialConnection != null) {userSocialConnection.setDisplayName(data.getDisplayName());userSocialConnection.setProfileUrl(data.getProfileUrl());userSocialConnection.setImageUrl(data.getImageUrl());userSocialConnection.setAccessToken(encrypt(data.getAccessToken()));userSocialConnection.setSecret(encrypt(data.getSecret()));userSocialConnection.setRefreshToken(encrypt(data.getRefreshToken()));userSocialConnection.setExpireTime(data.getExpireTime());this.userSocialConnectionRepository.save(userSocialConnection);}}public void removeConnections(String providerId) {List<UserSocialConnection> userSocialConnectionList = this.userSocialConnectionRepository.findByUserIdAndProviderId(userId, providerId);for (UserSocialConnection userSocialConnection : userSocialConnectionList) {this.userSocialConnectionRepository.delete(userSocialConnection);}}public void removeConnection(ConnectionKey connectionKey) {UserSocialConnection userSocialConnection = this.userSocialConnectionRepository.findByUserIdAndProviderIdAndProviderUserId(userId, connectionKey.getProviderId(), connectionKey.getProviderUserId());this.userSocialConnectionRepository.delete(userSocialConnection);}// internal helpersprivate Connection<?> buildConnection(UserSocialConnection userSocialConnection) {ConnectionData connectionData = new ConnectionData(userSocialConnection.getProviderId(),userSocialConnection.getProviderUserId(), userSocialConnection.getDisplayName(),userSocialConnection.getProfileUrl(), userSocialConnection.getImageUrl(),decrypt(userSocialConnection.getAccessToken()), decrypt(userSocialConnection.getSecret()),decrypt(userSocialConnection.getRefreshToken()), userSocialConnection.getExpireTime());ConnectionFactory<?> connectionFactory = this.socialAuthenticationServiceLocator.getConnectionFactory(connectionData.getProviderId());return connectionFactory.createConnection(connectionData);}private Connection<?> findPrimaryConnection(String providerId) {List<UserSocialConnection> userSocialConnectionList = this.userSocialConnectionRepository.findByUserIdAndProviderId(userId, providerId);return buildConnection(userSocialConnectionList.get(0));}private <A> String getProviderId(Class<A> apiType) {return socialAuthenticationServiceLocator.getConnectionFactory(apiType).getProviderId();}private String encrypt(String text) {return text != null ? textEncryptor.encrypt(text) : text;}private String decrypt(String encryptedText) {return encryptedText != null ? textEncryptor.decrypt(encryptedText) : encryptedText;}}

首先,我將JdbcTemplate替換為UserSocialConnectionRepository以從數據庫中檢索UserSocialConnection對象。 然后用spring-social-security模塊中的SocialAuthenticationServiceLocator替換ConnectionFactoryLocator 。 最大的變化是addConnection方法(上面已突出顯示),它首先檢查連接基數。 如果connectionCardinality的socialAuthenticationService是ONE_TO_ONE (這意味著一個用戶id與一個且僅一個對providerId / providerUserId的),或ONE_TO_MANY (這意味著一個用戶id可以連接到一個或多個providerId / providerUserId,但一對providerId / providerUserId的只能連接到一個userId)。

完成所有這些自定義之后,最后一步是在spring config中將它們粘合在一起:

@Configuration public class SocialAndSecurityConfig {@Injectprivate Environment environment;@InjectAccountService accountService;@Injectprivate AuthenticationManager authenticationManager;@Injectprivate UserSocialConnectionRepository userSocialConnectionRepository;@Beanpublic SocialAuthenticationServiceLocator socialAuthenticationServiceLocator() {SocialAuthenticationServiceRegistry registry = new SocialAuthenticationServiceRegistry();//add googleOAuth2ConnectionFactory<Google> googleConnectionFactory = new GoogleConnectionFactory(environment.getProperty('google.clientId'),environment.getProperty('google.clientSecret'));OAuth2AuthenticationService<Google> googleAuthenticationService = new OAuth2AuthenticationService<Google>(googleConnectionFactory);googleAuthenticationService.setScope('https://www.googleapis.com/auth/userinfo.profile');registry.addAuthenticationService(googleAuthenticationService);//add twitterOAuth1ConnectionFactory<Twitter> twitterConnectionFactory = new TwitterConnectionFactory(environment.getProperty('twitter.consumerKey'),environment.getProperty('twitter.consumerSecret'));OAuth1AuthenticationService<Twitter> twitterAuthenticationService = new OAuth1AuthenticationService<Twitter>(twitterConnectionFactory);registry.addAuthenticationService(twitterAuthenticationService);//add facebookOAuth2ConnectionFactory<Facebook> facebookConnectionFactory = new FacebookConnectionFactory(environment.getProperty('facebook.clientId'),environment.getProperty('facebook.clientSecret'));OAuth2AuthenticationService<Facebook> facebookAuthenticationService = new OAuth2AuthenticationService<Facebook>(facebookConnectionFactory);facebookAuthenticationService.setScope('');registry.addAuthenticationService(facebookAuthenticationService);return registry;}/*** Singleton data access object providing access to connections across all users.*/@Beanpublic UsersConnectionRepository usersConnectionRepository() {MongoUsersConnectionRepository repository = new MongoUsersConnectionRepository(userSocialConnectionRepository,socialAuthenticationServiceLocator(), Encryptors.noOpText());repository.setConnectionSignUp(autoConnectionSignUp());return repository;}/*** Request-scoped data access object providing access to the current user's connections.*/@Bean@Scope(value = 'request', proxyMode = ScopedProxyMode.INTERFACES)public ConnectionRepository connectionRepository() {UserAccount user = AccountUtils.getLoginUserAccount();return usersConnectionRepository().createConnectionRepository(user.getUsername());}/*** A proxy to a request-scoped object representing the current user's primary Google account.* * @throws NotConnectedException* if the user is not connected to Google.*/@Bean@Scope(value = 'request', proxyMode = ScopedProxyMode.INTERFACES)public Google google() {Connection<Google> google = connectionRepository().findPrimaryConnection(Google.class);return google != null ? google.getApi() : new GoogleTemplate();}@Bean@Scope(value='request', proxyMode=ScopedProxyMode.INTERFACES) public Facebook facebook() {Connection<Facebook> facebook = connectionRepository().findPrimaryConnection(Facebook.class);return facebook != null ? facebook.getApi() : new FacebookTemplate();}@Bean@Scope(value='request', proxyMode=ScopedProxyMode.INTERFACES) public Twitter twitter() {Connection<Twitter> twitter = connectionRepository().findPrimaryConnection(Twitter.class);return twitter != null ? twitter.getApi() : new TwitterTemplate();}@Beanpublic ConnectionSignUp autoConnectionSignUp() {return new AutoConnectionSignUp(accountService);}@Beanpublic SocialAuthenticationFilter socialAuthenticationFilter() {SocialAuthenticationFilter filter = new SocialAuthenticationFilter(authenticationManager, accountService,usersConnectionRepository(), socialAuthenticationServiceLocator());filter.setFilterProcessesUrl('/signin');filter.setSignupUrl(null); filter.setConnectionAddedRedirectUrl('/myAccount');filter.setPostLoginUrl('/myAccount');return filter;}@Beanpublic SocialAuthenticationProvider socialAuthenticationProvider(){return new SocialAuthenticationProvider(usersConnectionRepository(), accountService);}@Beanpublic LoginUrlAuthenticationEntryPoint socialAuthenticationEntryPoint(){return new LoginUrlAuthenticationEntryPoint('/signin');}}

accountService是我自己的用戶帳戶服務,用于提供與帳戶相關的功能,它實現了SocialUserDetailsService , UserDetailsService , UserIdExtractor 。

還有很多地方需要改進,例如重構MongoConnectionRepository和MongoUsersConnectionRepository以使用Spring Data Repository接口實現抽象的社交連接存儲庫實現。 而且我發現有人已經對此提出了一個問題: 利用Spring Data for UsersConnectionRepository 。

參考:來自我們的JCG合作伙伴 Yuan Ji在Jiwhiz博客上為MongoDB定制Spring Social Connect Framework 。

翻譯自: https://www.javacodegeeks.com/2013/03/customize-spring-social-connect-framework-for-mongodb.html

總結

以上是生活随笔為你收集整理的为MongoDB定制Spring Social Connect框架的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产精品不卡在线观看 | 日本高清中文字幕有码在线 | av资源网在线播放 | 2019精品手机国产品在线 | 国产精品网红直播 | 成人av观看 | 日精品在线观看 | 免费看黄在线看 | 十八岁以下禁止观看的1000个网站 | 在线国产中文字幕 | 婷婷亚洲综合 | 成人午夜电影在线播放 | 精品国产观看 | 精品久久五月天 | 日韩一二区在线观看 | 亚洲女欲精品久久久久久久18 | 91av在线播放视频 | 欧美国产日韩在线观看 | 婷婷伊人综合亚洲综合网 | 久久精品99国产精品酒店日本 | 尤物97国产精品久久精品国产 | 国内免费久久久久久久久久久 | 一区二区免费不卡在线 | 亚洲精选视频在线 | 日日干综合 | 精品国产一区二区三区四 | 91视频91蝌蚪| 久久久精品福利视频 | 久久精品国产一区二区 | 免费在线色电影 | 91精品国产综合久久久久久久 | 午夜资源站 | 日韩av一区二区三区 | 91久久久久久国产精品 | 久久久久在线观看 | japanesexxx乱女另类 | 成人在线播放视频 | 欧美福利网址 | 日本xxxxav| 成人免费在线视频 | 欧美a级免费视频 | 黄色1级毛片 | 亚洲精品乱码久久久久久高潮 | 久草在线免费看视频 | www.色午夜,com | 国产高清视频免费观看 | 久久有精品 | 国产一级二级三级视频 | 狠狠操综合 | 欧美日本在线观看视频 | 婷婷五天天在线视频 | 99热这里只有精品免费 | 亚洲一级黄色大片 | 高清av免费观看 | 久久久精品福利视频 | 日韩精品欧美一区 | 久久免费成人精品视频 | 韩国在线一区二区 | 国产污视频在线观看 | 最近中文字幕mv免费高清在线 | 久久tv视频 | 正在播放 久久 | av网址aaa| 欧美夫妻性生活电影 | 亚洲精品国产日韩 | 精品视频成人 | 三上悠亚在线免费 | 国产精选视频 | 精品国产一区二区三区在线观看 | 久久久久久久久久网站 | 久久成人在线视频 | 欧美久久精品 | 日韩剧情 | 黄色app网站在线观看 | 激情开心站 | 精品亚洲免a | 久久一区二区三区国产精品 | 九九99靖品 | 精品女同一区二区三区在线观看 | 五月婷婷影院 | 黄色av大片 | www看片网站 | 精品一区二区三区久久久 | 精品一区精品二区高清 | 国产精品国产三级国产aⅴ9色 | 国产精品免费大片视频 | 国产人免费人成免费视频 | 8x8x在线观看视频 | 韩国一区视频 | 国产精品第72页 | 九九免费在线观看视频 | 久久久精品视频网站 | 九九热久久免费视频 | 天天色草 | 97精品国产97久久久久久粉红 | 色黄久久久久久 | 久久精品久久精品久久精品 | 91在线国产观看 | 狠狠色丁香婷婷综合久小说久 | 亚洲日本成人网 | 国产精品自产拍在线观看 | 欧美激情视频一区二区三区免费 | 国产精品一区二区在线免费观看 | 久久男人免费视频 | 色夜视频 | 免费黄色av片 | 国产精品白丝jk白祙 | 五月香视频在线观看 | 99国产精品一区 | 久久人人干 | 亚洲在线观看av | 最近中文字幕高清字幕在线视频 | 国产精品乱码久久久久 | va视频在线 | 美女网站色免费 | 日产乱码一二三区别在线 | 国产在线国产 | 婷婷在线精品视频 | 日韩精品中文字幕在线播放 | 婷婷久久亚洲 | 色婷在线| 18久久久| 这里有精品在线视频 | 精品国产一区二区三区久久久久久 | 国产精品久久久久一区二区三区 | 91在线亚洲 | 日本激情中文字幕 | 亚洲视频高清 | 九九免费在线视频 | 91精品区 | 亚洲精品视频在线观看网站 | 成年人在线播放视频 | 精品在线观看国产 | 中文字幕av最新更新 | 日韩一级成人av | 日韩剧情 | 成年人网站免费在线观看 | 伊人天天狠天天添日日拍 | 不卡的av| 中文字幕在线视频一区二区三区 | 黄色影院在线观看 | 六月婷操 | av一级在线观看 | 国产视频在线一区二区 | 三级黄色三级 | 午夜久久福利视频 | 中文字幕乱偷在线 | 中文字幕二区在线观看 | 五月婷在线播放 | 韩日三级在线 | 亚洲干 | 麻豆一级视频 | 国产精品18毛片一区二区 | 亚洲精品在线观看视频 | 岛国av在线| 黄色片视频免费 | 国产一级一级国产 | 日韩激情视频在线观看 | 天堂av中文字幕 | 天堂久色| 免费视频91 | 日韩av在线免费看 | 中文字幕在线色 | 九九九热精品免费视频观看 | 久久精品日产第一区二区三区乱码 | 欧美午夜激情网 | 亚洲国产视频在线 | 精品久久久久久久久久久久 | 国产一区在线看 | 中文字幕国产一区二区 | 亚洲高清激情 | 高潮毛片无遮挡高清免费 | 免费看国产曰批40分钟 | 欧洲色综合| 五月天激情综合网 | 亚洲乱码精品久久久久 | 成年人在线看片 | 日韩一区二区三区高清免费看看 | 欧美一级视频一区 | 91av视频免费在线观看 | 五月视频 | 中文字幕之中文字幕 | 欧美aaa大片 | 国产亚洲免费的视频看 | 丁香六月婷婷 | 青青河边草免费观看 | 亚洲精品在 | 九九激情视频 | 81精品国产乱码久久久久久 | 九月婷婷色| 色香网| 高清久久久久久 | 四虎影视久久久 | 国产日本亚洲高清 | 91在线成人 | 精品五月天 | 亚洲一区二区麻豆 | 欧美在线观看视频一区二区三区 | 日韩精品你懂的 | 欧美一级高清片 | 日韩黄视频 | 在线观看中文字幕视频 | www.久久色 | 黄色av电影在线 | 国产九九热视频 | 成人欧美一区二区三区在线观看 | 免费福利在线观看 | 一区二区精品在线 | 91天天操| av一级一片| 午夜精品一区二区三区视频免费看 | 国产成人333kkk | 国产精品久久久久影视 | 国产精品18久久久久vr手机版特色 | 久久成人人人人精品欧 | 国产区在线看 | 黄色软件在线看 | 婷婷亚洲激情 | 99精品视频免费全部在线 | 激情五月开心 | www国产亚洲 | 久久超碰免费 | 日韩精品免费在线播放 | 精品久久九九 | 成人影音av| 人人干人人爽 | 欧美 日韩 国产 中文字幕 | 欧美一区二区精美视频 | 色噜噜噜 | 一区二区三区四区久久 | 午夜精品电影 | 99精品视频在线播放免费 | 国产精品mv在线观看 | av免费在线观看网站 | 综合在线观看色 | 91tv国产成人福利 | 不卡的av在线播放 | 麻豆视频国产在线观看 | 国产麻豆视频免费观看 | 99久久精品久久久久久清纯 | 亚洲国产合集 | 精品黄色视 | 久久国产精品99国产精 | 久久精品网站免费观看 | 亚洲激精日韩激精欧美精品 | 欧美 日韩 久久 | 亚洲精品网站 | 91一区啪爱嗯打偷拍欧美 | 亚洲日本一区二区在线 | 成人午夜免费剧场 | 日韩伦理片一区二区三区 | 中文字幕在线观看的网站 | 五月婷婷六月丁香 | 99在线观看免费视频精品观看 | 国产不卡视频在线 | 欧美激情精品久久久久久免费印度 | 国模一区二区三区四区 | 国产 av 日韩 | 激情文学综合丁香 | 九九久久免费视频 | 午夜99| 成人av在线网 | 又粗又长又大又爽又黄少妇毛片 | 免费黄色看片 | 午夜.dj高清免费观看视频 | 国产精品专区一 | 日韩中文字幕免费看 | www视频在线免费观看 | 国产精品18久久久 | 国产美女精品 | av一级二级 | 日韩首页 | 成人av资源网 | 色在线高清| 美女一级毛片视频 | 成人在线免费视频观看 | 日韩中文字幕电影 | 日韩欧美高清一区二区 | 日韩免费网址 | 最近免费中文字幕 | 九色porny真实丨国产18 | freejavvideo日本免费 | 成人91在线 | 99精品偷拍视频一区二区三区 | 一级成人在线 | 国产午夜在线观看视频 | 国产精品嫩草在线 | 美州a亚洲一视本频v色道 | www.黄色片网站| 最新精品国产 | 91中文视频 | 国产精品视频免费看 | 精品国产一二区 | 国产精品不卡在线观看 | 欧美肥妇free | 国产专区视频在线 | 天天躁日日躁狠狠躁av麻豆 | 91福利视频在线 | 日韩一二区在线观看 | 免费在线观看av网站 | 成人av免费网站 | 午夜精品福利在线 | 国产一区二区视频在线 | 免费视频一二三区 | 亚洲国产日韩欧美 | 天天操天天是 | 日本激情视频中文字幕 | a√天堂资源 | 亚洲波多野结衣 | 中文字幕在线播放av | 天天干天天做 | 国产精品久久久久久久久久新婚 | 日韩黄色大片在线观看 | 欧美日韩国内在线 | 91av视频在线观看 | 丁香五月缴情综合网 | 日韩中文字幕电影 | 色网站免费在线观看 | 日韩精品在线视频 | 久久精品久久精品久久 | 亚洲韩国一区二区三区 | 中文字幕色网站 | 91精品久久久久 | 精品嫩模福利一区二区蜜臀 | 国产精品毛片一区二区在线 | 亚洲天堂网在线观看视频 | 国产精品久久久久久久久久99 | 91在线精品观看 | 99欧美 | 日韩高清观看 | 国产视频在 | 日本一区二区三区免费观看 | 99在线免费观看视频 | 在线免费观看av网站 | 99色人 | 久久视奸 | 国内视频 | 日韩二区三区在线观看 | av视屏在线| 色综合天天综合网国产成人网 | 久久激情电影 | 国产精品视频免费看 | 一区二区在线电影 | 在线免费观看黄色av | 日本成人中文字幕在线观看 | 亚洲精品色视频 | 中文字幕在线一区二区三区 | 成人久久久电影 | av在线播放国产 | 久久露脸国产精品 | 欧美性粗大hdvideo | 日韩有码中文字幕在线 | 草久在线播放 | 久产久精国产品 | 五月天国产精品 | 欧美人交a欧美精品 | 亚洲欧美在线视频免费 | 国产精品久久久毛片 | 成人精品视频 | 免费日韩一区二区三区 | 国产日韩一区在线 | 91黄色小视频 | 黄色成人影视 | 精品国产伦一区二区三区观看体验 | 中文一区二区三区在线观看 | 91专区在线观看 | 久久久免费播放 | 亚洲aⅴ免费在线观看 | 天天久久综合 | 久久久久免费精品 | 探花视频在线观看免费 | 91香蕉视频污在线 | 中文字幕第 | wwwwww黄| 国产成人精品国内自产拍免费看 | 国产不卡在线观看视频 | 久久色中文字幕 | 亚洲午夜久久久久久久久久久 | 欧美国产亚洲精品久久久8v | 亚洲黄网站 | 免费在线观看成年人视频 | 99精品久久精品一区二区 | 亚洲一级片免费观看 | 婷婷久久一区 | 日韩精品你懂的 | 日韩国产精品一区 | 欧美性黄网官网 | 日韩免费一级电影 | 日韩精品视频在线观看网址 | 国产 日韩 在线 亚洲 字幕 中文 | 国产精品99在线播放 | 99久热在线精品视频观看 | www.av免费观看 | 欧美一级免费 | 久久呀 | 狠狠色丁香婷婷综合视频 | 在线av资源 | 91社区国产高清 | 国产精品欧美久久久久天天影视 | 久久久久综合视频 | 狠狠夜夜 | 国产福利不卡视频 | 99久久婷婷国产综合精品 | 国产黄大片在线观看 | 一区二区三区在线观看中文字幕 | 免费人成网 | 亚洲五月婷 | 国产视频在 | 欧美 日韩 性 | 欧美ⅹxxxxxx | 国产在线1区| 91福利专区 | 日韩国产精品一区 | 四虎免费在线观看 | 亚洲专区路线二 | 97自拍超碰| 国产精品丝袜久久久久久久不卡 | 综合在线亚洲 | 五月婷婷视频 | 日韩欧美在线国产 | 婷婷视频在线播放 | 免费观看xxxx9999片 | 国产精品第一页在线 | 在线免费高清 | 国产精品毛片久久久久久久久久99999999 | 九九视频在线观看视频6 | 欧美精品久久久久久久久免 | 亚洲精品国产成人av在线 | 久久免费视频国产 | 人人看人人做人人澡 | 日韩免费中文字幕 | 五月激情亚洲 | 免费人成在线观看 | 亚洲天天综合网 | 亚洲精品免费在线观看 | 色婷婷伊人 | 色狠狠综合| 久久亚洲在线 | 欧美亚洲国产日韩 | 久久久久一区 | wwwwww国产| 色夜影院 | 日韩欧美一区二区不卡 | 国产在线精品福利 | 18pao国产成视频永久免费 | 美女网站免费福利视频 | 国产视频综合在线 | av亚洲产国偷v产偷v自拍小说 | a天堂在线看| 国产精品第一页在线 | 日韩中文字幕电影 | 天天综合色网 | 婷婷丁香花五月天 | 在线观看av大片 | 国产伦理精品一区二区 | 九九99| 五月婷婷视频在线 | 91在线国内视频 | 午夜av一区 | 五月天综合激情 | 热久久免费国产视频 | 麻豆视频免费在线播放 | 免费在线黄色av | 亚洲国产成人在线播放 | 国产成人高清 | 三级黄色片子 | 午夜手机看片 | 99久久精品国产欧美主题曲 | 波多野结衣在线观看视频 | 日韩四虎 | 国产精品久久久久久久av大片 | 免费一级片观看 | av在线网站观看 | 精品黄色在线观看 | 在线观看中文字幕 | 欧美激情视频一区二区三区 | 99精品偷拍视频一区二区三区 | 久久精品这里热有精品 | 91色国产在线 | 视频一区在线免费观看 | 中文不卡视频 | www.福利视频| 亚欧日韩av| 91福利国产在线观看 | 亚洲精品中文在线观看 | 久久久久久久久久久电影 | av免费看在线 | 韩国av电影在线观看 | 69久久99精品久久久久婷婷 | 手机成人在线 | 国产在线观看av | 性色av免费在线观看 | 久久亚洲私人国产精品va | 亚洲精品乱码久久 | 特级西西人体444是什么意思 | 天天操天天操 | 久久a久久| av东方在线 | 九九视频一区 | 天天综合色网 | av丝袜美腿 | 亚洲无吗天堂 | 一级国产视频 | 久久免费国产视频 | 伊人色播 | 国产高清不卡在线 | av不卡免费在线观看 | 成人一级视频在线观看 | 久久综合久久综合这里只有精品 | 欧美 亚洲 另类 激情 另类 | 国产高清视频 | 成人毛片在线观看视频 | 中文字幕中文字幕在线中文字幕三区 | 精品久久网站 | 亚洲精品成人免费 | 久久久www成人免费毛片 | 国产99久久久国产精品免费看 | 69欧美视频| av久久在线 | 91精品国产欧美一区二区 | av免费片 | 96精品在线 | 91亚洲国产成人 | 高清不卡毛片 | 久草在线视频首页 | 精品免费国产一区二区三区四区 | 欧美日韩久久不卡 | 美女激情影院 | 亚洲每日更新 | 国产精品视频专区 | 精品国产电影一区二区 | 中文字幕在线视频一区二区 | 欧美一区成人 | 亚洲激情在线观看 | 欧美孕妇视频 | 亚洲视频在线免费看 | 91视频3p| 久久伊人八月婷婷综合激情 | 九九热免费视频在线观看 | 国产精品一区二区三区99 | 一区二区中文字幕在线播放 | 国产一区二区免费 | 欧美综合久久久 | 97高清免费视频 | 色综合久久综合网 | 欧美人zozo | 热热热热热色 | 亚洲欧美综合精品久久成人 | 99精品一级欧美片免费播放 | 欧美91精品久久久久国产性生爱 | 狠狠天天| 808电影免费观看三年 | 日韩高清不卡在线 | 国产精品999久久久 久产久精国产品 | 国产精品激情偷乱一区二区∴ | 91av原创| 久久99国产精品久久99 | 美女在线国产 | 久精品视频| 国产91精品看黄网站在线观看动漫 | 精品在线视频播放 | 亚洲精品永久免费视频 | 欧美精品久久久久 | 99精品久久久久久久久久综合 | 91精品免费在线观看 | 最近免费在线观看 | 一区二区三区四区在线 | 天天色天天射综合网 | 福利一区视频 | 成人黄色电影在线观看 | 男女男视频| 亚洲成年人在线播放 | 日韩在线观看第一页 | 免费在线观看视频a | 成人亚洲精品国产www | 欧美一级日韩免费不卡 | 欧美日本一区 | 最近高清中文在线字幕在线观看 | 亚洲免费小视频 | 日本公妇在线观看 | av片子在线观看 | av在线播放观看 | 久久专区| 在线看av的网址 | 日韩欧美一区二区在线 | 日韩在线免费播放 | 久久久网页 | 一区二区在线影院 | 亚洲春色综合另类校园电影 | 久久在草 | 少妇av网 | 久久婷婷精品视频 | 国产在线观看中文字幕 | 性日韩欧美在线视频 | 免费在线a | 四虎永久免费在线观看 | 99视频国产精品免费观看 | 四虎影视4hu4虎成人 | 欧美日韩国产一区二区三区 | 国产一区二区在线免费观看 | 精品毛片在线 | 国产精品 日韩 | 99热国产在线中文 | 国产美女精品视频 | 999ZYZ玖玖资源站永久 | 亚洲成av人影片在线观看 | 久久久久久久久久久免费av | 蜜桃传媒一区二区 | 91在线看 | 在线免费观看国产精品 | 国产一区二区在线视频观看 | jizzjizzjizz亚洲| 天堂av免费 | 91精品国自产在线 | 一区二区三区 亚洲 | 亚洲日本国产精品 | 天天天天色综合 | 久久精品爱视频 | 久久久免费高清视频 | 四虎成人在线 | 中文字幕资源网 国产 | 日本久久综合视频 | 国产在线日本 | 日韩视频一二三区 | 国产黄影院色大全免费 | 九九免费在线观看 | 天天干天天拍天天操天天拍 | 久热只有精品 | 在线视频一区二区 | 狠狠色狠狠色终合网 | 日韩最新理论电影 | 国产黄大片 | 亚洲国产美女精品久久久久∴ | 欧美国产亚洲精品久久久8v | 日本久久成人中文字幕电影 | 我要看黄色一级片 | av千婊在线免费观看 | 亚洲狠狠丁香婷婷综合久久久 | 日韩精品一区二区三区三炮视频 | 国产亚洲在线观看 | 天天天天天天干 | 亚洲国产精品一区二区久久,亚洲午夜 | 亚州精品在线视频 | 欧美做受xxx | 天天干天天操天天入 | 欧美精品在线一区 | 国产成人精品女人久久久 | 国产黄色片一级三级 | 国产69精品久久久久久久久久 | 国产一级片在线播放 | 婷婷在线不卡 | 日本在线观看中文字幕 | 国产啊v在线 | 人人插人人舔 | 亚洲三级视频 | 天天夜夜狠狠操 | 成人黄色免费在线观看 | 91手机电视 | 四虎国产免费 | 综合天天网 | 欧美在线日韩在线 | 国产黄网站在线观看 | 亚洲精品字幕在线观看 | 丁香婷婷久久久综合精品国产 | 999久久久精品视频 日韩高清www | 一区二区三区精品久久久 | 五月开心婷婷 | 久久精品久久99 | 欧美激情xxxx性bbbb | wwwwwww黄 | 又黄又爽又无遮挡的视频 | 国产理论影院 | 久久精品视频中文字幕 | 97手机电影网 | 国产免费亚洲高清 | 天天插天天 | 在线国产黄色 | 久久免费毛片视频 | 日韩免费 | 在线香蕉视频 | 一区二区三区www | 在线观看国产成人av片 | 免费在线观看成年人视频 | 国内偷拍精品视频 | 久久精品系列 | 国产一区视频在线播放 | 国产夫妻自拍av | 99视频在线免费看 | 三级毛片视频 | 国产69精品久久久久久久久久 | 久久精品久久久精品美女 | 亚洲国产中文字幕 | 日韩一级片大全 | 国产精品一区二区av | 国产精品久久久久久久久久久久午夜片 | 久久好看免费视频 | 久久免费精彩视频 | 三级黄色网址 | 少妇bbb好爽 | 激情五月av | 日韩高清 一区 | 超碰免费在线公开 | 国产伦理一区 | 天天射日 | 国产伦精品一区二区三区… | 亚洲精品www | 在线观看的av网站 | 国产丝袜在线 | 亚洲国产资源 | www.com.日本一级 | 日批视频 | 欧美精品一区在线发布 | 日韩在线一二三区 | 久久久精品网站 | 日韩精品一区二区三区中文字幕 | 欧美性春潮 | 香蕉日日| 91视频免费观看 | 91精品视频免费看 | 极品嫩模被强到高潮呻吟91 | 国产视频1 | 欧美成人基地 | 成 人 黄 色 免费播放 | 精品欧美乱码久久久久久 | 日韩精品一区二区在线观看视频 | 国产男女爽爽爽免费视频 | 免费看一级片 | 欧美 激情 国产 91 在线 | 国产香蕉97碰碰碰视频在线观看 | 日韩中文字幕在线不卡 | 伊人激情网 | 免费久久久久久 | 久久精品爱视频 | 欧美日韩高清一区二区 | 日韩伦理片一区二区三区 | 黄色片视频在线观看 | 麻豆视频免费在线播放 | 亚洲欧美成人 | 狠狠操综合 | 天天射天天做 | 精品免费久久久久 | 国产精品视频区 | 碰超人人 | 视频在线精品 | 国产精品免费大片视频 | 91视频久久| 亚洲视频456 | 亚洲激色 | 国产99中文字幕 | 国产欧美日韩一区 | 国产精品a久久 | 国产一区二区不卡视频 | 久久a v电影 | 国产性xxxx| 午夜少妇一区二区三区 | 97狠狠操| 天天综合网国产 | 免费网站黄 | av一本久道久久波多野结衣 | 欧美日韩二三区 | 99精品视频观看 | av黄色免费在线观看 | 久久国产精品视频观看 | 中文字幕丝袜制服 | 最新动作电影 | 成人av.com| 在线观看免费高清视频大全追剧 | 欧美在线久久 | 欧美夫妻生活视频 | 草久久久久 | 日韩在线免费不卡 | 久久精品网站视频 | 免费视频资源 | 97免费中文视频在线观看 | 久久99精品国产99久久 | 伊人开心激情 | 精品国产1区二区 | 天天操比 | 久久高清国产视频 | 91视频3p| 天天爽夜夜爽精品视频婷婷 | 97成人超碰 | 日日夜夜精品免费观看 | 国产美女视频网站 | 亚洲va欧美va | 麻豆91视频 | 特黄特色特刺激视频免费播放 | 在线国产激情视频 | 一区二区三区韩国免费中文网站 | 久久人人爽爽人人爽人人片av | 99久久精品国产毛片 | 国产.精品.日韩.另类.中文.在线.播放 | 深夜视频久久 | 久久久久亚洲精品男人的天堂 | 久草视频2| 亚洲精品乱码久久久久久蜜桃欧美 | 欧美精品久久久久久久久老牛影院 | 中日韩在线视频 | 欧美a级在线 | 91麻豆国产| 中文字幕在线网址 | 国产最新视频在线观看 | 成人av片免费观看app下载 | 亚洲激情一区二区三区 | 在线观看色视频 | 91九色蝌蚪国产 | 国产精品久久久久久久久久99 | 精品一区二三区 | 欧美色精品天天在线观看视频 | 97碰碰碰| 亚洲精品18日本一区app | 日韩视频在线观看视频 | 国产精品99久久久久久宅男 | 久精品视频 | 韩国精品福利一区二区三区 | 国产国语在线 | 亚洲精品免费在线观看 | 国产一二三区在线观看 | 日韩视频精品在线 | 在线观看国产日韩 | 人人揉人人揉人人揉人人揉97 | 在线观看mv的中文字幕网站 | 日韩中午字幕 | 久久久黄色av| 97国产精品亚洲精品 | 激情视频久久 | 成人午夜毛片 | 国产亚洲精品福利 | 久久免费国产电影 | 免费男女羞羞的视频网站中文字幕 | 丁香在线| 伊人黄色网 | 99热日本 | 狠狠狠狠狠狠狠狠干 | 中文字幕一区二区三区在线观看 | 久久久久久网 | 免费黄色激情视频 | 国产v在线 | 91在线国内视频 | 9久久精品| 欧美巨大 | 黄色一级在线观看 | 黄色视屏在线免费观看 | 国产精品资源 | 国产va饥渴难耐女保洁员在线观看 | 国产成人一区二区三区影院在线 | 91九色视频在线 | 久草网视频在线观看 | 欧美激情第一区 | 91成人免费 | 成人午夜电影免费在线观看 | 麻豆成人精品 | 久久久亚洲麻豆日韩精品一区三区 | 午夜精品久久 | 色婷婷av一区二 | 91成人午夜 | 中文字幕资源站 | 91成版人在线观看入口 | 久久综合一本 | 成人精品福利 | 日韩一区二区三区观看 | 亚洲国产精品va在线 | 亚洲人成人在线 | 99久久精品免费看国产免费软件 | 天天操狠狠干 | 国产精品免费久久久久 | 在线av资源 | 日韩有码在线观看视频 | 天天色天 | 99精品成人 | 97精品超碰一区二区三区 | 一区中文字幕 | 婷婷在线免费视频 | 天天干天天做天天爱 | 亚洲欧美国内爽妇网 | 一区二区中文字幕在线播放 | 天天爱综合 | 日韩免费在线一区 | 久久电影网站中文字幕 | 天天射狠狠干 | 久久99精品久久久久久久久久久久 | av在线播放国产 | 极品嫩模被强到高潮呻吟91 | 偷拍福利视频一区二区三区 | 丝袜av一区 | 亚洲最大成人免费网站 | 久久久久久久久久久福利 | 午夜丰满寂寞少妇精品 | 四虎影视精品 | 五月婷网站 | 成人h在线观看 | 中文字幕在线观看的网站 | 在线亚洲观看 | 9999在线 | 久久久久9999亚洲精品 | 香蕉久草| japanesexxxhd奶水| 在线观看中文字幕2021 | 色中色资源站 | 久久草草影视免费网 | 色吧久久 | 欧美色综合 | 国产精品九九久久99视频 | 日韩欧美99 | 国产成人精品在线 | 午夜成人免费影院 | 国产精品久久久 | 亚洲精品视频在线观看网站 | 网站在线观看日韩 | 免费看黄在线看 | 久草视频播放 | 国产免费久久久久 | 4hu视频| 在线免费精品视频 | 国产日产精品一区二区三区四区的观看方式 | 婷婷激情综合五月天 | 超碰人人草 | av网站免费在线 | 日韩av一区二区三区在线观看 | 波多野结衣在线观看视频 | 狠狠干天天射 | 欧美在线不卡一区 | 美女免费黄视频网站 | 久久人视频 | 97福利视频 | 精品中文字幕在线 | 午夜在线资源 | 久久理伦片 | 麻豆国产精品va在线观看不卡 | 月下香电影 | 久久婷婷一区 | 91人人爽久久涩噜噜噜 | 亚洲天堂网在线视频 | 2021国产在线 | 国产精品久久99综合免费观看尤物 | 亚洲午夜久久久久 | 久久亚洲影院 | 极品嫩模被强到高潮呻吟91 | 国产黄色理论片 | 欧美 日韩 视频 | 欧美日韩一区二区久久 | 开心综合网 | 欧美日韩一二三四区 | 久草在线综合网 | 人人盈棋牌 | 天天激情在线 | 久久久鲁 | 久久一久久 | 亚洲人人av | 美女黄频网站 | 婷婷五情天综123 | 黄色成人av | 日韩av不卡在线 | 字幕网资源站中文字幕 | 国产精品国产亚洲精品看不卡 | 精品久久久久久久久久久院品网 | 九九免费在线观看视频 | 天天噜天天色 | 91色在线观看视频 | 久久午夜精品视频 | 免费久久视频 | 亚洲va天堂va欧美ⅴa在线 | 免费黄色网址网站 | 在线日韩中文 | 亚洲一区网站 | 色窝资源 | 国内精品视频在线 | 亚洲高清在线 | 久久伊人八月婷婷综合激情 | 日p视频| 亚洲欧美少妇 | aaa日本高清在线播放免费观看 | 免费91麻豆精品国产自产在线观看 | 国产亚洲精品福利 | 国内成人精品2018免费看 | 国产a网站 | 亚洲草视频 | 久久艹在线 | 亚洲国产成人高清精品 | 蜜臀av网址 | 欧美超碰在线 | 婷婷av网站| 六月丁香社区 | 国产精品21区 | 麻豆国产网站 | 天堂资源在线观看视频 | 97视频播放 | 成人a视频片观看免费 | 国产精品久久99综合免费观看尤物 | 天天插狠狠插 | 日韩在线免费高清视频 | 日韩在线视频免费观看 | 久久久久久久国产精品 | 九色最新网址 | 日韩精品一区二区三区免费观看视频 | 能在线看的av | 国产欧美最新羞羞视频在线观看 | 美国人与动物xxxx |