Jersey的OAuth

问题描述:

RESTful系统是使用球衣构造的。 验证签名并且无法执行签名时发生错误。 如果理解原因的人进入,请教。Jersey的OAuth

MacOS X的 码头 谷歌应用程序引擎

(客户端)

@GET 
@Path("/oauth_client") 
@Produces("text/html") 
public String oauthClient() { 

    OAuthParameters params = new OAuthParameters().consumerKey("hoge").signatureMethod("HMAC-SHA1").timestamp().nonce().version("1.1").token("sho1get"); 
    OAuthSecrets secrets = new OAuthSecrets().consumerSecret("testtest").tokenSecret("testtest"); 

    Client client = Client.create(); 
    WebResource resource = client.resource("http://localhost:8080/v1/test/oauth_provider"); 

    OAuthClientFilter filter = new OAuthClientFilter(client.getProviders(), params, secrets); 
    resource.addFilter(filter); 

    System.out.println("==== Client ====="); 
    return resource.get(String.class); 
} 

(供应商)

@Path("/oauth_provider") 
@Produces("text/plain") 
public String oauthProvider(@Context HttpContext context) { 

    OAuthServerRequest request = new OAuthServerRequest(context.getRequest()); 
    OAuthParameters params = new OAuthParameters().readRequest(request); 
    OAuthSecrets secrets = new OAuthSecrets().consumerSecret("hoge").tokenSecret("testtest"); 
    String timestamp = params.getTimestamp(); 

    try { 
     /* The error occurs here. */ 
     if (OAuthSignature.verify(request, params, secrets)) { 
      return "OK"; 
     } 
    } catch (OAuthSignatureException e) { 
     log.warning(e.getMessage()); 
    } catch (UniformInterfaceException e) { 
     log.warning(e.getMessage()); 
    } catch (Exception e) { 
     log.warning(e.getMessage()); 
    } 

    return "ERROR"; 
} 

(错误)

[java] 2011/03/09 4:52:07 com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException 
[java] SEVERE: The exception contained within MappableContainerException could not be mapped to a response, re-throwing to the HTTP container 
[java] java.lang.AbstractMethodError 
[java]   at com.sun.jersey.oauth.signature.OAuthSignature.constructRequestURL(OAuthSignature.java:193) 
[java]   at com.sun.jersey.oauth.signature.OAuthSignature.elements(OAuthSignature.java:218) 
[java]   at com.sun.jersey.oauth.signature.OAuthSignature.verify(OAuthSignature.java:117) 
[java]   at jp.tryden.resources.test.TestResource.oauthProvider(TestResource.java:259) 
[java]   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[java]   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
[java]   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
[java]   at java.lang.reflect.Method.invoke(Method.java:597) 
[java]   at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:100) 
[java]   at com.sun.jersey.server.impl.uri.rules.SubLocatorRule.invokeSubLocator(SubLocatorRule.java:162) 
[java]   at com.sun.jersey.server.impl.uri.rules.SubLocatorRule.accept(SubLocatorRule.java:94) 
[java]   at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:133) 
[java]   at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:83) 
[java]   at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:133) 
[java]   at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:71) 
[java]   at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:990) 
[java]   at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:941) 
[java]   at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:932) 
[java]   at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:384) 
[java]   at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:451) 
[java]   at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:632) 
[java]   at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
[java]   at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
[java]   at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 
[java]   at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:58) 
[java]   at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
[java]   at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 
[java]   at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
[java]   at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122) 
[java]   at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
[java]   at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
[java]   at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
[java]   at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
[java]   at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
[java]   at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
[java]   at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70) 
[java]   at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
[java]   at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:349) 
[java]   at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
[java]   at org.mortbay.jetty.Server.handle(Server.java:326) 
[java]   at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
[java]   at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 
[java]   at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547) 
[java]   at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 
[java]   at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
[java]   at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 
[java]   at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 
[java] 2011/03/09 4:52:07 com.google.apphosting.utils.jetty.JettyLogger warn 

您是否使用最新的MacOS Java更新更新了您的计算机? http://support.apple.com/kb/HT4562

此更新导致Google App Engine dev_server崩溃,并且可能也会对您造成影响。目前还不知道谁应该承担责任,但是在这里已经提交了一个appengine bug:http://code.google.com/p/googleappengine/issues/detail?id=4712

如果有多人出演这个问题,我们可能会得到更快的响应。