This commit includes the new docs for HTTP behavior in Jena 3.1.1. I can't find any way to see a view of this on the staging site-- https://jena.staging.apache.org/ just seems to proxy https://cms.apache.org/, for some reason?
--- A. Soroka The University of Virginia Library > On Nov 8, 2016, at 11:53 AM, [email protected] wrote: > > Author: ajs6f > Date: Tue Nov 8 16:53:48 2016 > New Revision: 1768736 > > URL: http://svn.apache.org/viewvc?rev=1768736&view=rev > Log: > Updates for HTTP behavior in Jena 3.1.1 > > Modified: > jena/site/trunk/content/documentation/query/http-auth.mdtext > jena/site/trunk/content/documentation/query/service.mdtext > > Modified: jena/site/trunk/content/documentation/query/http-auth.mdtext > URL: > http://svn.apache.org/viewvc/jena/site/trunk/content/documentation/query/http-auth.mdtext?rev=1768736&r1=1768735&r2=1768736&view=diff > ============================================================================== > --- jena/site/trunk/content/documentation/query/http-auth.mdtext (original) > +++ jena/site/trunk/content/documentation/query/http-auth.mdtext Tue Nov 8 > 16:53:48 2016 > @@ -16,10 +16,12 @@ Notice: Licensed to the Apache Softwa > specific language governing permissions and limitations > under the License. > > -As of ARQ 2.11.0 there is a new unified HTTP operation framework that > provides a uniform mechanism for > -HTTP authentication that also allows ARQ to support a broader range of > authentication mechanisms than were previously possible. > +From ARQ 2.11.0 through ARQ 3.1.0 there is a Jena-specific unified HTTP > operation framework that provides a uniform mechanism for > +HTTP authentication that also allows ARQ to support a broader range of > authentication mechanisms than were previously possible. After ARQ 3.1.0, > Jena exposes the underlying HTTP Commons functionality to the same end. This > documentation is therefore devided into two sections. The first explains the > older Jena-specific functionality, and the second explains how to use HTTP > Commons code to the same ends. > > -## Applying Authentication > +## HTTP Authentication before ARQ 3.1.0 > + > +### Applying Authentication > > APIs that support authentication typically provide two methods for providing > authenticators, a `setAuthentication(String username, char[] password)` method > which merely configures a `SimpleAuthenticator`. There will also be a > `setAuthenticator(HttpAuthenticator authenticator)` method > @@ -41,14 +43,14 @@ avoids the needs to cast and manually se > ... > } > > -### Authenticators > +#### Authenticators > > Authentication mechanisms are provided by [HttpAuthenticator][1] > implementations of which a number are provided built into ARQ. > > This API provides the authenticator with access to the `HttpClient`, > `HttpContext` and target `URI` of the request that is about to be carried > out. This allows for authenticators to add credentials to requests on a > per-request basis and/or to use different mechanisms and credentials for > different services. > > -#### SimpleAuthenticator > +##### SimpleAuthenticator > > The [simple authenticator][2] is as the name suggests the simplest > implementation. It takes a single set of credentials which is applied to > any service. > @@ -56,7 +58,7 @@ any service. > Authentication however is not preemptive so unless the remote service sends a > HTTP challenge (401 Unauthorized or 407 Proxy Authorization > Required) then credentials will not actually be submitted. > > -#### ScopedAuthenticator > +##### ScopedAuthenticator > > The [scoped authenticator][3] is an authenticator which maps credentials to > different service URIs. This allows you to specify different > credentials for different services as appropriate. Similarly to the simple > authenticator this is not preemptive authentication so credentials are > @@ -67,13 +69,13 @@ if you define credentialsfor `http://exa > e.g. `http://example.org/some/path`. However if you had also defined > credentials for `http://example.org/some/path` then these would be > used in favor of those for `http://example.org` > > -#### ServiceAuthenticator > +##### ServiceAuthenticator > > The [service authenticator][4] is an authenticator which uses information > encoded in the ARQ context and basically provides access to the > existing credential provision mechanisms provided for the `SERVICE` clause, > see [Basic Federated Query][5] for more information on > configuration for this. > > -#### FormsAuthenticator > +##### FormsAuthenticator > > The [forms authenticator][6] is an authenticator usable with services that > require form based logins and use session cookies to verify login state. > This is intended for use with services that don't support HTTP's built-in > authentication mechanisms for whatever reason. One example of this > @@ -104,7 +106,7 @@ that maps each service to an associated > > Currently forms based login that require more than just a username and > password are not supported. > > -#### PreemptiveBasicAuthenticator > +##### PreemptiveBasicAuthenticator > > This [authenticator][8] is a decorator over another authenticator that > enables preemptive basic authentication, this **only** works for servers > that support basic authentication and so will cause authentication failures > when any other authentication scheme is required. You should **only** > @@ -121,20 +123,12 @@ Also be aware that basic authentication > many servers will use more secure schemes like Digest authentication which > **cannot** be done preemptively as they require more complex > challenge response sequences. > > -#### DelegatingAuthenticator > +##### DelegatingAuthenticator > > The [delegating authenticator][12] allows for mapping different > authenticators to different services, this is useful when you need to mix and > match the types of authentication needed. > > -### Debugging Authentication > - > -ARQ uses [Apache Http Client][14] for all its HTTP operations and this > provides detailed logging information that can be used for debugging. To > -see this information you need to configure your logging framework to set the > `org.apache.http` package to either `DEBUG` or `TRACE` level. > - > -The `DEBUG` level will give you general diagnostic information about > requests and responses while the `TRACE` level will give you detailed > -HTTP traces i.e. allow you to see the exact HTTP requests and responses > which can be extremely useful for debugging authentication problems. > - > -### The Default Authenticator > +#### The Default Authenticator > > Since it may not always be possible/practical to configure authenticators on > a per-request basis the API includes a means to specify a default > authenticator that is used when no authenticator is explicitly specified. > This may be configured via the > @@ -148,6 +142,82 @@ provided that it is using ARQs APIs to m > > Note that the default authenticator may be disabled by setting it to `null`. > > +## HTTP Authentication after ARQ 3.1.0 > + > +### Applying Authentication > + > +APIs that support authentication typically provide methods for providing an > [HttpClient] for use with the given instance of that API class. `HttpClient` > is [extremely flexible][16] and can handle most scenarios very well. Since it > may not always be possible/practical to configure authenticators on a > per-request basis the API includes a means to specify a default client that > is used when no other client is explicitly specified. This may be configured > via the > +`setDefaultHttpClient(HttpClient httpClient)` method of the [HttpOp][13] > class. This allows for static-scoped configuration of HTTP behavior. > + > +#### Examples of authentication > + > +This section includes a series of examples showing how to use HTTP Commons > classes to perform authenticated work. Most of them take advantage of > `HttpOp.setDefaultHttpClient` as described above. > + > +##### Simple authentication using username and password > + > +First we build an authenticating client: > + > + CredentialsProvider credsProvider = new BasicCredentialsProvider(); > + Credentials credentials = new UsernamePasswordCredentials("user", > "passwd"); > + credsProvider.setCredentials(AuthScope.ANY, credentials); > + HttpClient httpclient = HttpClients.custom() > + .setDefaultCredentialsProvider(credsProvider) > + .build(); > + HttpOp.setDefaultHttpClient(httpclient); > + > +Notice that we gave no scope for use with the credentials (`AuthScope.ANY`). > We can make further use of that parameter if we want to assign a scope for > some credentials: > + > + CredentialsProvider credsProvider = new BasicCredentialsProvider(); > + Credentials unscopedCredentials = new > UsernamePasswordCredentials("user", "passwd"); > + credsProvider.setCredentials(AuthScope.ANY, unscopedCredentials); > + Credentials scopedCredentials = new UsernamePasswordCredentials("user", > "passwd"); > + final String host = "http://example.com/sparql"; > + final int port = 80; > + final String realm = "aRealm"; > + final String schemeName = "DIGEST"; > + AuthScope authscope = new AuthScope(host, port, realm, schemeName); > + credsProvider.setCredentials(authscope, scopedCredentials); > + HttpClient httpclient = HttpClients.custom() > + .setDefaultCredentialsProvider(credsProvider) > + .build(); > + HttpOp.setDefaultHttpClient(httpclient); > + > +##### Authenticating via a form > + > +For this case we introduce an [HttpClientContext][17], which we can use to > retrieve the cookie we get from logging into a form. We then use the cookie > to authenticate elsewhere. > + > + // we'll use this context to maintain our HTTP "conversation" > + HttpClientContext httpContext = new HttpClientContext(); > + > + // first we use a method on HttpOp to log in and get our cookie > + Params params = new Params(); > + params.addParam("username", "Bob Wu"); > + params.addParam("password", "my password"); > + HttpOp.execHttpPostForm("http://example.com/loginform", params , null, > null, null, httpContext); > + > + // now our cookie is stored in httpContext > + CookieStore cookieStore = httpContext.getCookieStore(); > + > + // lastly we build a client that uses that cookie > + HttpClient httpclient = HttpClients.custom() > + .setDefaultCookieStore(cookieStore) > + .build(); > + HttpOp.setDefaultHttpClient(httpclient); > + > +## Other concerns > + > +### Debugging Authentication > + > +ARQ uses [Apache Http Client][14] for all its HTTP operations and this > provides detailed logging information that can be used for debugging. To > +see this information you need to configure your logging framework to set the > `org.apache.http` package to either `DEBUG` or `TRACE` level. > + > +The `DEBUG` level will give you general diagnostic information about > requests and responses while the `TRACE` level will give you detailed > +HTTP traces i.e. allow you to see the exact HTTP requests and responses > which can be extremely useful for debugging authentication problems. > + > +### Authenticating to a SPARQL federated service > + > +ARQ allows the user to configure HTTP behavior to use on a per-`SERVICE` > basis, including authentication behavior such as is described above. This > works via the ARQ context. See [Basic Federated Query][5] for more > information on configuring this functionality. > + > [1]: > http://jena.apache.org/documentation/javadoc/arq/org/apache/jena/atlas/web/auth/HttpAuthenticator.html > [2]: > http://jena.apache.org/documentation/javadoc/arq/org/apache/jena/atlas/web/auth/SimpleAuthenticator.html > [3]: > http://jena.apache.org/documentation/javadoc/arq/org/apache/jena/atlas/web/auth/ScopedAuthenticator.html > @@ -161,4 +231,7 @@ Note that the default authenticator may > [11]: > http://jena.apache.org/documentation/javadoc/arq/org/apache/jena/web/DatasetGraphAccessorHTTP.html > [12]: > http://jena.apache.org/documentation/javadoc/arq/org/apache/jena/atlas/web/auth/DelegatingAuthenticator.html > [13]: > http://jena.apache.org/documentation/javadoc/arq/org/apache/jena/riot/web/HttpOp.html > - [14]: http://hc.apache.org > \ No newline at end of file > + [14]: http://hc.apache.org > + [15]: > https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/client/HttpClient.html > + [16]: https://hc.apache.org/httpcomponents-client-ga/examples.html > + [17]: > https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/client/protocol/HttpClientContext.html > \ No newline at end of file > > Modified: jena/site/trunk/content/documentation/query/service.mdtext > URL: > http://svn.apache.org/viewvc/jena/site/trunk/content/documentation/query/service.mdtext?rev=1768736&r1=1768735&r2=1768736&view=diff > ============================================================================== > --- jena/site/trunk/content/documentation/query/service.mdtext (original) > +++ jena/site/trunk/content/documentation/query/service.mdtext Tue Nov 8 > 16:53:48 2016 > @@ -48,19 +48,18 @@ distributed query evaluation. The algebr > without regard to how selective the pattern is. So the order of the > query will affect the speed of execution. Because it involves HTTP > operations, asking the query in the right order matters a lot. > -Don't ask for the whole of a bookstore just to find book whose > +Don't ask for the whole of a bookstore just to find a book whose > title comes from a local RDF file - ask the bookshop a query with > the title already bound from earlier in the query. > > ## Controlling `SERVICE` requests. > > -The `SERVICE` operation in a SPARQL query may be configured via the Context. > -The values for configuration can be set in the global context (accessed via > +The `SERVICE` operation in a SPARQL query may be configured via the Context. > The values for configuration can be set in the global context (accessed via > `ARQ.getContext()`) or in the per-query execution context. > > The prefix `srv:` is the IRI `<http://jena.hpl.hp.com/Service#>`. > > -### Summary > +### Configuration for ARQ through version 3.1.0 > > Symbol | Usage > ------ | ----- > @@ -71,7 +70,7 @@ Symbol | Usage > `srv:queryAuthPwd` | Basic authentication > `srv:queryContext` | Per-endpoint configuration > > -### `srv:queryTimeout` > +#### `srv:queryTimeout` > > Set the connect and read timeouts for the query. > > @@ -86,21 +85,21 @@ read timout = 0 > > Values of 0 indicate no timeout and service operation will wait until the > remote server responds. > > -### `srv:queryGzip` > +#### `srv:queryGzip` > > Sets the allow Gzip flag. > > Boolean: True indicates that gzip compressed data is acceptable. > false > > -### `srv:queryDeflate` > +#### `srv:queryDeflate` > > Sets the allow Deflate flag. > > Boolean: True indicates that deflate compression is acceptable > False > > -### `srv:queryAuthUser` > +#### `srv:queryAuthUser` > > Sets the user id for basic auth. > > @@ -108,7 +107,7 @@ String: The user id to log in with > > If null or null length no user id is sent. > > -### `srv:queryAuthPwd` > +#### `srv:queryAuthPwd` > > Sets the password for basic auth. > > @@ -116,13 +115,43 @@ String: The password to log in with. > > If null or null length no password is sent. > > -### srv:serviceContext > +#### `srv:serviceContext` > Provides a mechanism to override system context settings on a per URI basis. > > The value is a `Map<String,Context>` where the map key is the URI of the > service endpoint, and the `Context` is a set of values to override the > default values. > > If a context is provided for the URI the system context is copied and the URI > specific values are then copied in. This ensures that any URI specific > settings will be used. > > +### Configuration for ARQ after version 3.1.0 > > +Symbol | Usage | Default > +------ | ----- | ------- > +`srv:queryTimeout` | Set timeouts | none > +`srv:queryCompression` | Enable use of deflation and GZip | true > +`srv:queryClient` | Enable use of a specific client | none > +`srv:queryContext` | Per-endpoint configuration | none > + > +#### `srv:queryTimeout` > + > +As documented above. > + > + > +#### `srv:queryCompression` > + > +Sets the flag for use of deflation and GZip. > + > +Boolean: True indicates that gzip compressed data is acceptable. > + > +#### `srv:queryClient` > + > +Enable use of a specific client > + > +Provides a slot for a specific [HttpClient][1] for use with a specific > `SERVICE` > + > +#### `srv:serviceContext` > + > +As documented above. > > [ARQ documentation index](index.html) > + > +[1]: > https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/client/HttpClient.html > >
