当前位置: 首页 > news >正文

网站建设工程设计图人们常用的网页设计工具是

网站建设工程设计图,人们常用的网页设计工具是,宿迁北京网站建设,建设区块链网站在上一篇文章中 #xff0c;我谈到了我面临的第一个挑战是更改数据模型并添加连接框架。 在这里#xff0c;我想提供有关我如何做的更多详细信息。 Spring Social项目已经提供了基于jdbc的连接存储库实现#xff0c;以将用户连接数据持久保存到关系数据库中。 但是#xff… 在上一篇文章中 我谈到了我面临的第一个挑战是更改数据模型并添加连接框架。 在这里我想提供有关我如何做的更多详细信息。 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 MongoRepositoryUserSocialConnection, String{ListUserSocialConnection findByUserId(String userId);ListUserSocialConnection findByUserIdAndProviderId(String userId, String providerId);ListUserSocialConnection findByProviderIdAndProviderUserId(String providerId, String providerUserId);UserSocialConnection findByUserIdAndProviderIdAndProviderUserId(String userId, String providerId, String providerUserId);ListUserSocialConnection findByProviderIdAndProviderUserIdIn(String providerId, CollectionString 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 ListString findUserIdsWithConnection(Connection? connection) {ConnectionKey key connection.getKey();ListUserSocialConnection userSocialConnectionList this.userSocialConnectionRepository.findByProviderIdAndProviderUserId(key.getProviderId(), key.getProviderUserId());ListString localUserIds new ArrayListString();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 SetString findUserIdsConnectedTo(String providerId, SetString providerUserIds) {final SetString localUserIds new HashSetString();ListUserSocialConnection 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 MultiValueMapString, Connection? findAllConnections() {ListUserSocialConnection userSocialConnectionList this.userSocialConnectionRepository.findByUserId(userId);MultiValueMapString, Connection? connections new LinkedMultiValueMapString, Connection?();SetString 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 LinkedListConnection?());}connections.add(providerId, buildConnection(userSocialConnection));}return connections;}public ListConnection? findConnections(String providerId) {ListConnection? resultList new LinkedListConnection?();ListUserSocialConnection userSocialConnectionList this.userSocialConnectionRepository.findByUserIdAndProviderId(userId, providerId);for (UserSocialConnection userSocialConnection : userSocialConnectionList) {resultList.add(buildConnection(userSocialConnection));}return resultList;}SuppressWarnings(unchecked)public A ListConnectionA findConnections(ClassA apiType) {List? connections findConnections(getProviderId(apiType));return (ListConnectionA) connections;}public MultiValueMapString, Connection? findConnectionsToUsers(MultiValueMapString, String providerUsers) {if (providerUsers null || providerUsers.isEmpty()) {throw new IllegalArgumentException(Unable to execute find: no providerUsers provided);}MultiValueMapString, Connection? connectionsForUsers new LinkedMultiValueMapString, Connection?();for (IteratorEntryString, ListString it providerUsers.entrySet().iterator(); it.hasNext();) {EntryString, ListString entry it.next();String providerId entry.getKey();ListString providerUserIds entry.getValue();ListUserSocialConnection userSocialConnections this.userSocialConnectionRepository.findByProviderIdAndProviderUserIdIn(providerId, providerUserIds);ListConnection? connections new ArrayListConnection?(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 ConnectionA getConnection(ClassA apiType, String providerUserId) {String providerId getProviderId(apiType);return (ConnectionA) getConnection(new ConnectionKey(providerId, providerUserId));}SuppressWarnings(unchecked)public A ConnectionA getPrimaryConnection(ClassA apiType) {String providerId getProviderId(apiType);ConnectionA connection (ConnectionA) findPrimaryConnection(providerId);if (connection null) {throw new NotConnectedException(providerId);}return connection;}SuppressWarnings(unchecked)public A ConnectionA findPrimaryConnection(ClassA apiType) {String providerId getProviderId(apiType);return (ConnectionA) 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){ListUserSocialConnection 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) {ListUserSocialConnection 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) {ListUserSocialConnection userSocialConnectionList this.userSocialConnectionRepository.findByUserIdAndProviderId(userId, providerId);return buildConnection(userSocialConnectionList.get(0));}private A String getProviderId(ClassA 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 googleOAuth2ConnectionFactoryGoogle googleConnectionFactory new GoogleConnectionFactory(environment.getProperty(google.clientId),environment.getProperty(google.clientSecret));OAuth2AuthenticationServiceGoogle googleAuthenticationService new OAuth2AuthenticationServiceGoogle(googleConnectionFactory);googleAuthenticationService.setScope(https://www.googleapis.com/auth/userinfo.profile);registry.addAuthenticationService(googleAuthenticationService);//add twitterOAuth1ConnectionFactoryTwitter twitterConnectionFactory new TwitterConnectionFactory(environment.getProperty(twitter.consumerKey),environment.getProperty(twitter.consumerSecret));OAuth1AuthenticationServiceTwitter twitterAuthenticationService new OAuth1AuthenticationServiceTwitter(twitterConnectionFactory);registry.addAuthenticationService(twitterAuthenticationService);//add facebookOAuth2ConnectionFactoryFacebook facebookConnectionFactory new FacebookConnectionFactory(environment.getProperty(facebook.clientId),environment.getProperty(facebook.clientSecret));OAuth2AuthenticationServiceFacebook facebookAuthenticationService new OAuth2AuthenticationServiceFacebook(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 users connections.*/BeanScope(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 users primary Google account.* * throws NotConnectedException* if the user is not connected to Google.*/BeanScope(value request, proxyMode ScopedProxyMode.INTERFACES)public Google google() {ConnectionGoogle google connectionRepository().findPrimaryConnection(Google.class);return google ! null ? google.getApi() : new GoogleTemplate();}BeanScope(valuerequest, proxyModeScopedProxyMode.INTERFACES) public Facebook facebook() {ConnectionFacebook facebook connectionRepository().findPrimaryConnection(Facebook.class);return facebook ! null ? facebook.getApi() : new FacebookTemplate();}BeanScope(valuerequest, proxyModeScopedProxyMode.INTERFACES) public Twitter twitter() {ConnectionTwitter 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接口来实现抽象的社交连接存储库实现。 而且我发现有人已经对此提出了一个问题 为UsersConnectionRepository利用Spring数据 。 参考来自我们的JCG合作伙伴 Yuan Ji在Jiwhiz博客上为MongoDB定制Spring Social Connect Framework 。 翻译自: https://www.javacodegeeks.com/2013/03/customize-spring-social-connect-framework-for-mongodb.html
http://www.huolong8.cn/news/434610/

相关文章:

  • 杭州cms模板建站网页设计师培训大全
  • 厦门哪些做鲜花的网站如何网上建设网站
  • wordpress网站新闻织梦网站后台密码忘记
  • 提供邢台做wap网站免费网站域名空间
  • asp.net程序做的网站安全吗长域名的优秀网站
  • 长沙服务专业的建网站python做的大型网站
  • 网站首页浮动窗口代码大都会app用不了
  • windowxp做网站服务器wordpress 语言切换
  • 前端代码大全台州seo排名优化
  • 复旦大学精品课程网站旅游网站的设计的前提
  • 高端的的网站建设公司开票开网站建设费
  • 站长工具查询seowordpress控制字数
  • 邢台市网站开发公司有哪些颐和国际沧州网络科技
  • 电商网站建设优缺点免费招聘网站平台有哪些
  • 资阳地网站seo福州网红打卡景点
  • 网站建设图片教程网站建设模板研究
  • 重庆网站备案查询系统华强北ic网站建设
  • 东莞市房管局官方网站杭州网站建设方案
  • 苏州网站建设推广咨询平台wordpress使用redis
  • 酷维网站模版wordpress网站添加背景音乐
  • 面包店网站建设规划书提高工作效率的方法不正确的是
  • 网站模板在线制作公司网站可以自己做吗
  • asp网站程序wordpress add_user_meta
  • 校园网站建设论文做创业网站赚钱
  • 广州网站营销北京专门做网站的公司
  • flashfxp链接网站商标设计注册一条龙价格
  • 唐山建网站的公司阿里云虚拟主机wordpress建站
  • 阿里巴巴网站开发申请域名之后如何做网站
  • 成都网站建设 好多科技医院网站php源码
  • 做视频网站成本高吗网站的 联系我们怎么做