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

手表到哪个网站买wordpress是是什么技术

手表到哪个网站买,wordpress是是什么技术,深圳公司网站推广,php小说采集网站源码app engine这篇文章将说明如何构建一个简单的Google App Engine#xff08;GAE#xff09;Java应用程序#xff0c;该应用程序可以针对Google进行身份验证#xff0c;并利用Google的OAuth授权访问Google的API服务#xff08;例如Google Docs#xff09;。 此外#xff0… app engine 这篇文章将说明如何构建一个简单的Google App EngineGAEJava应用程序该应用程序可以针对Google进行身份验证并利用Google的OAuth授权访问Google的API服务例如Google Docs。 此外在Google已经提供的一些示例的基础上还将说明如何使用App Engine 数据存储区和Objectify持久化数据。 项目源代码 这篇文章背后的动机是我很难找到以前将这些技术真正联系在一起的任何示例。 但是这些技术确实代表了许多想要利用大量Google API服务的Web应用程序的基础。 为了简单起见该演示仅允许用户通过Google域登录。 授权访问用户的Google文档服务 并显示用户的Google Docs Word和电子表格文档的列表。 在本教程中我确实对读者的专业知识做出了一些假设例如对Java的非常熟悉。 流程概述 在我们直接进入教程/演示之前让我们简要介绍一下导航流程。 尽管它看起来很复杂但是主要流程可以总结为 用户请求访问listFiles.jsp实际上可以使用任何JSP页面。 检查用户是否已登录Google。 如果不是它们将被重定向到Google登录页面-登录后它们将返回。 然后进行检查以确定用户是否存储在本地数据存储中。 如果没有则将用户与用户的Google域电子邮件地址一起添加。 接下来我们检查用户是否已将OAuth凭据授予了Google Docs API服务。 如果不是则启动OAuth身份验证过程。 授予OAuth凭据后它们将存储在本地用户表中因此我们不必在每次用户尝试访问服务时都询问。 最后显示Google文档电子表格或Word文档的列表。 可以使用相同的方法来访问其他Google服务例如YouTube例如您可以显示用户喜欢的视频的列表。 环境设定 对于本教程我使用以下内容 Eclipse Indigo Service Release 2以及适用于Eclipse的Google插件请参阅设置说明 。 Google GData Java SDK Eclipse插件版本1.47.1请参阅设置说明 。 Google App Engine 1.6.5版。 早期版本存在一些问题因此我建议确保您正在使用它。 它应该作为Eclipse的Google插件的一部分自动安装。 Objectify版本3.1。 所需的库已安装在项目的war / WEB-INF / lib目录中。 将项目导入Eclipse之后您的构建路径应类似于 App Engine设置应类似于 您将需要设置自己的GAE应用程序以及指定自己的应用程序ID请参阅Google GAE开发人员文档 。 我见过的最好的教程介绍了如何使用OAuth访问Google API服务可以在这里找到。 我发现最令人困惑的方面之一是如何获取放置OAuth请求时所需的必需的消费者密钥和消费者秘密值。 我完成此操作的方式是 使用GAE管理控制台创建GAE应用程序。 您将需要创建自己的应用程序ID只是您的Web应用程序的名称。 有了它您将在上面显示的Eclipse App Engine设置面板中更新您的应用程序ID。 为该应用程序创建一个新的域。 例如由于我的应用程序ID在上面指定为“ tennis-coachrx”因此我将目标URL路径前缀配置为http://tennis-coachrx.appspot.com/authSub。 您将看到我们如何配置该Servlet以便很快接收凭证。 为了完成域名注册Google将为您提供可以上传HTML文件。 将该文件的根路径包括在/ src / war目录下然后将应用程序上载到GAE。 这样当Google运行检查时该文件将存在并生成必要的消费者凭证。 这是设置完成后的屏幕截图 拥有OAuth使用者密钥和OAuth使用者密钥之后 您将替换com.zazarie.shared.Constant文件中的以下值 最后的静态字符串CONSUMER_KEY ; 最后的静态字符串CONSUMER_SECRET ; 哇这似乎是很多工作 但是这是一次性交易您不必再次大惊小怪。 代码演练 现在我们已经摆脱了OAuth配置/设置的麻烦现在我们可以深入研究代码了。 让我们从查看战争目录的结构开始您的Web资产位于该目录中 listFiles.jsp是您首次进入Web应用程序时显示的默认JSP页面。 现在让我们看一下web.xml文件看看如何配置它以及对所有内容都至关重要的servlet过滤器。 ?xml version1.0 encodingUTF-8?web-app xmlns:xsihttp:www.w3.org2001XMLSchema-instancexsi:schemaLocationhttp:java.sun.comxmlnsjavaee http:java.sun.comxmlnsjavaeeweb-app_2_5.xsdversion2.5 xmlnshttp:java.sun.comxmlnsjavaee!-- Filters --filterfilter-nameAuthorizationFilterfilter-namefilter-classcom.zazarie.server.servlet.filter.AuthorizationFilterfilter-classfilterfilter-mappingfilter-nameAuthorizationFilterfilter-nameurl-patternhtml*url-patternfilter-mapping!-- Servlets --servletservlet-nameStep2servlet-nameservlet-classcom.zazarie.server.servlet.RequestTokenCallbackServletservlet-classservletservlet-mappingservlet-nameStep2servlet-nameurl-patternauthSuburl-patternservlet-mapping!-- Default page to serve --welcome-file-listwelcome-filehtmllistFiles.jspwelcome-filewelcome-file-listweb-app 每当请求位于html目录中的JSP文件时就会调用称为AuthorizationFilter的servlet过滤器。 我们稍后将介绍的过滤器负责确保用户已登录Google如果是则确保已为该用户授予OAuth凭据即它将启动OAuth认证过程如果需要。 步骤2的Servlet名称代表已授予OAuth凭据时Google调用的Servlet-将其视为回调。 我们将对此进行更详细的介绍。 让我们更详细地看一下AuthorizationFilter。 AuthorizationFilter深潜 doFilter方法是在servlet过滤器中进行工作的地方。 这是实现 Overridepublic void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {HttpServletRequest request (HttpServletRequest) req;HttpServletResponse response (HttpServletResponse) res;HttpSession session request.getSession();LOGGER.info(Invoking Authorization Filter);LOGGER.info(Destination URL is: request.getRequestURI());if (filterConfig null)return;get the Google userAppUser appUser LoginService.login(request, response);if (appUser ! null) {session.setAttribute(Constant.AUTH_USER, appUser);}identify if user has an OAuth accessToken - it not, will set in motionoauth procedureif (appUser.getCredentials() null) {need to save the target URI in session so we can forward to it whenoauth is completedsession.setAttribute(Constant.TARGET_URI, request.getRequestURI());OAuthRequestService.requestOAuth(request, response, session);return;} elsestore DocService in the session so it can be reusedsession.setAttribute(Constant.DOC_SESSION_ID,LoginService.docServiceFactory(appUser));chain.doFilter(request, response);} 除了通常的内务处理外主要逻辑还从以下几行开始 AppUser appUser LoginService.loginrequestresponse; 稍后我们将看到LoginService负责将用户登录到Google并且还将在本地BigTable数据存储区中创建用户。 通过将用户存储在本地我们可以存储用户的OAuth凭据从而消除了用户每次访问受限/过滤页面时都必须授予权限的需求。 在LoginService返回用户AppUser对象之后我们将该用户对象存储到会话中注意要启用会话必须在appengine-web.xml文件中设置session-enabled session.setAttributeConstant.AUTH_USERappUser; 然后我们检查OAuth凭据是否与该用户相关联 如果appUser.getCredentials null{ session.setAttributeConstant.TARGET_URIrequest.getRequestURI; OAuthRequestService.requestOAuth请求响应会话; 返回; }其他 session.setAttributeConstant.DOC_SESSION_IDLoginService.docServiceFactoryappUser; 如果getCredentials返回null则尚未为用户分配OAuth凭据。 这意味着OAuth流程需要启动。 由于此过程分为两步即将请求发布到Google然后通过回调上面提到的Step2 servlet取回结果因此我们需要存储目标URL以便在授权后可以将用户重定向到该URL。处理完成。 这是通过使用setAttribute方法将请求的URL存储到会话中来完成的。 然后我们通过调用OAuthRequestService.requestOAuth方法开始OAuth流程详细信息将在下面讨论。 如果getCredentials返回一个非null值则表明我们已经从数据存储区中的本地AppUser条目中获取了用户的OAuth凭据我们只需将其添加到会话中以便以后使用。 LoginService深入研究 LoginService类具有一个称为login的主要方法其后是一堆JPA帮助器方法用于保存或更新数据存储区中的本地用户。 我们将重点放在login上因为这是大多数业务逻辑所在的位置。 public static AppUser login(HttpServletRequest req, HttpServletResponse res) {LOGGER.setLevel(Constant.LOG_LEVEL);LOGGER.info(Initializing LoginService);String URI req.getRequestURI();UserService userService UserServiceFactory.getUserService();User user userService.getCurrentUser();if (user ! null) {LOGGER.info(User id is: userService.getCurrentUser().getUserId() );String userEmail userService.getCurrentUser().getEmail();AppUser appUser (AppUser) req.getSession().getAttribute(Constant.AUTH_USER);if (appUser null) {LOGGER.info(appUser not found in session);see if it is a new userappUser findUser(userEmail);if (appUser null) {LOGGER.info(User not found in datastore...creating);appUser addUser(userEmail);} else {LOGGER.info(User found in datastore...updating);appUser updateUserTimeStamp(appUser);}} else {appUser updateUserTimeStamp(appUser);}return appUser;} else {LOGGER.info(Redirecting user to login page);try {res.sendRedirect(userService.createLoginURL(URI));} catch (IOException e) {e.printStackTrace();}}return null;} 我们要做的第一件事是使用Google UserService类来确定用户是否登录到Google UserService userService UserServiceFactory.getUserService; 用户用户 userService.getCurrentUser; 如果Google的调用返回的User对象为null则不会登录该用户并使用以下命令将其重定向到登录页面 res.sendRedirectuserService.createLoginURLURI; 如果用户已登录即不为null则下一步是确定该用户是否存在于本地数据存储中。 这是通过使用appUser findUseruserEmail查找用户及其登录的Google电子邮件地址来完成的。 由于JPA / Objectify并不是本教程的主要讨论重点因此我将不讨论该方法的工作原理。 但是 Objectify网站上有一些很棒的教程/文档。 如果用户在本地不存在则使用Google的电子邮件地址填充该对象并使用appUser addUseruserEmail创建该对象。 如果用户确实存在我们仅出于登录目的而更新登录时间戳。 OAuthRequestService深入研究 您可能还记得过一旦在本地设置了用户然后AuthorizationFilter便会检查以查看用户是否已授予OAuth凭据。 如果不是则调用OAuthRequestService.requestOAuth方法。 如下图所示 public static void requestOAuth(HttpServletRequest req,HttpServletResponse res, HttpSession session) {LOGGER.setLevel(Constant.LOG_LEVEL);LOGGER.info(Initializing OAuthRequestService);GoogleOAuthParameters oauthParameters new GoogleOAuthParameters();oauthParameters.setOAuthConsumerKey(Constant.CONSUMER_KEY);oauthParameters.setOAuthConsumerSecret(Constant.CONSUMER_SECRET);Set the scope.oauthParameters.setScope(Constant.GOOGLE_RESOURCE);Sets the callback URL.oauthParameters.setOAuthCallback(Constant.OATH_CALLBACK);GoogleOAuthHelper oauthHelper new GoogleOAuthHelper(new OAuthHmacSha1Signer());try {Request is still unauthorized at this pointoauthHelper.getUnauthorizedRequestToken(oauthParameters);Generate the authorization URLString approvalPageUrl oauthHelper.createUserAuthorizationUrl(oauthParameters);session.setAttribute(Constant.SESSION_OAUTH_TOKEN,oauthParameters.getOAuthTokenSecret());LOGGER.info(Session attributes are: session.getAttributeNames().hasMoreElements());res.getWriter().print(a href approvalPageUrl Request token for the Google Documents Scope);} catch (OAuthException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}} 为了简化OAuth的使用Google提供了一组我们正在使用的Java帮助器类。 我们需要做的第一件事是设置使用者凭证获取这些凭证已在前面讨论 GoogleOAuthParameters oauthParameters 新的GoogleOAuthParameters; oauthParameters.setOAuthConsumerKeyConstant.CONSUMER_KEY; oauthParameters.setOAuthConsumerSecretConstant.CONSUMER_SECRET; 然后我们使用以下命令设置OAuth请求的范围 oauthParameters.setScopeConstant.GOOGLE_RESOURCE; Constant.GOOGLE_RESOURCE解析为https://docs.google.com/feeds/的位置。 发出OAuth请求时请指定您试图获得访问权限的资源范围。 在这种情况下我们尝试访问Google文档每个服务的GData API都提供了作用域URL。 接下来我们确定希望Google返回答复的位置。 oauthParameters.setOAuthCallbackConstant.OATH_CALLBACK; 无论我们是以开发人员模式在本地运行还是部署到Google App Engine此值都会更改。 在Constant接口中定义值的方法如下 //用于在GAE上运行 //最终静态字符串OATH_CALLBACK http://tennis-coachrx.appspot.com/authSub; //用于本地测试 最后的静态字符串OATH_CALLBACK http://127.0.0.1:8888/authSub; 然后使用Google的帮助者签署请求时 GoogleOAuthHelper oauthHelper 新的GoogleOAuthHelper新的OAuthHmacSha1Signer; 然后我们生成用户将导航到的URL以授权对资源的访问。 这是使用以下方法动态生成的 字符串rovalPageUrl oauthHelper.createUserAuthorizationUrloauthParameters; 最后一步是向用户提供链接以便他们可以导航到该URL来批准请求。 这是通过构造一些简单HTML来完成的这些HTML使用res.getWriter。print输出。 用户授予访问权限后Google便会调用由URL参数/ authSub标识的servlet该参数对应于servlet类RequestTokenCallbackServlet。 接下来我们将对此进行检查。 RequestTokenCallbackServlet深入研究 该servlet使用Google OAuth帮助程序类来生成所需的访问令牌和秘密访问令牌这些访问令牌和秘密访问令牌在随后对Google API文档服务的调用中将是必需的。 这是从Google接收回叫响应的doGet方法 public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {Create an instance of GoogleOAuthParametersGoogleOAuthParameters oauthParameters new GoogleOAuthParameters();oauthParameters.setOAuthConsumerKey(Constant.CONSUMER_KEY);oauthParameters.setOAuthConsumerSecret(Constant.CONSUMER_SECRET);GoogleOAuthHelper oauthHelper new GoogleOAuthHelper(new OAuthHmacSha1Signer());String oauthTokenSecret (String) req.getSession().getAttribute(Constant.SESSION_OAUTH_TOKEN);AppUser appUser (AppUser) req.getSession().getAttribute(Constant.AUTH_USER);oauthParameters.setOAuthTokenSecret(oauthTokenSecret);oauthHelper.getOAuthParametersFromCallback(req.getQueryString(),oauthParameters);try {String accessToken oauthHelper.getAccessToken(oauthParameters);String accessTokenSecret oauthParameters.getOAuthTokenSecret();appUser LoginService.getById(appUser.getId());appUser LoginService.updateUserCredentials(appUser,new OauthCredentials(accessToken, accessTokenSecret));req.getSession().setAttribute(Constant.DOC_SESSION_ID,LoginService.docServiceFactory(appUser));RequestDispatcher dispatcher req.getRequestDispatcher((String) req.getSession().getAttribute(Constant.TARGET_URI));if (dispatcher ! null)dispatcher.forward(req, resp);} catch (OAuthException e) {e.printStackTrace();}} Google GoogleOAuthHelper用于执行填充我们感兴趣的两个值所需的整理任务 字符串accessToken oauthHelper.getAccessTokenoauthParameters; 字符串accessTokenSecret oauthParameters.getOAuthTokenSecret; 获得这些值后我们便从数据存储区中重新查询用户对象并将这些值保存到AppUser.OauthCredentials子类中 appUser LoginService.getByIdappUser.getId; appUser LoginService.updateUserCredentialsappUser 新的OauthCredentialsaccessTokenaccessTokenSecret; req.getSession。setAttributeConstant.DOC_SESSION_ID LoginService.docServiceFactoryappUser; 此外您还会看到它们也存储在会话中因此在向Google Docs发出API请求时我们可以随时使用它们。 现在我们已经拥有了所需的一切我们只需将用户重定向回他们最初请求的资源即可 RequestDispatcher调度程序 req.getRequestDispatcherStringreq .getSession。getAttributeConstant.TARGET_URI; dispatcher.forwardreqresp; 现在当他们访问列出其文档的JSP页面时一切都应该正常工作 这是最终产品的截屏演示 希望您喜欢本教程和演示-期待您的评论 继续本教程的第二部分 。 参考来自Jeffs SOA Ruminations博客的JCG合作伙伴 Jeff Davis 对Google App Engine中的Google Services进行身份验证 。 翻译自: https://www.javacodegeeks.com/2012/06/google-services-authentication-in-app.htmlapp engine
http://www.sadfv.cn/news/302555/

相关文章:

  • 海淀网站建设怎么样天津建设网站
  • 莱芜网站建设案例郑州新一网站建设
  • 天津建网站自己做的网站显示iis7
  • 网站做中英文切换四川建设数据共享平台
  • 邯郸建移动网站费用wordpress 本地安装插件
  • 网站服务器错误wordpress 取消注册邮件
  • 红酒网站建设方案范本佛山网站设计中心
  • 北京 网站建设咨询顾问公司WordPress表单系统
  • 绵阳微信网站创意图案设计网站
  • 做推广的网站营销新闻
  • 邢台移动网站建设报价wordpress账号admin
  • 电子商务网站开发技术的背景怎么制作链接视频教程
  • 什么软件可以做网站南宁企业官网设计
  • 微网站怎么做百度关键词登录域名管理网站
  • 温州网站开发app制作discuz下载官网
  • 县文化馆网站建设方案肥城网站建设公司
  • 宁波网站建设多少钱可以做流程图的网站
  • 做网站到底能不能赚钱网站建设教程流程
  • 临沧网站搭建ai智能生成图片免费网站
  • 网站横向菜单oa系统开发教程
  • vs2015做网站的后端网站建设_聊城
  • 网站备案的链接京东物流网站建设策划书
  • 成都设计网站建设如何打开图片工具wordpress
  • 网站有什么好处整屏幕滑动的网站
  • 进入公众号平台百度优化网站建设
  • 个人做网站下载网上图可以吗wordpress 网站禁用全屏代码
  • 诗词网页制作素材北京网站优化流程
  • 二级网站内容建设要求wordpress多重查询
  • 做什么网站流量大北京最大的广告公司
  • .net开发手机网站郑州新闻