Search in sources :

Example 1 with AuthorizationService

use of org.apache.jena.fuseki.access.AuthorizationService in project jena by apache.

the class ExFuseki_06_DataAccessCtl method main.

public static void main(String... a) {
    FusekiLogging.setLogging();
    int port = WebLib.choosePort();
    String datasetName = "/ds";
    String URL = format("http://localhost:%d%s", port, datasetName);
    // ---- Set up the registry.
    AuthorizationService authorizeSvc;
    {
        SecurityRegistry reg = new SecurityRegistry();
        // user1 can see the default graph and :g1
        reg.put("user1", new SecurityContextView("http://example/g1", Quad.defaultGraphIRI.getURI()));
        // user2 can see :g1
        reg.put("user2", new SecurityContextView("http://example/g1"));
        // user3 can see :g1 and :g2
        reg.put("user3", new SecurityContextView("http://example/g1", "http://example/g2"));
        // Hide implementation.
        authorizeSvc = reg;
    }
    // ---- Some data
    DatasetGraph dsg = createData();
    // ---- User authentication database (Jetty specific)
    UserStore userStore = new UserStore();
    addUserPassword(userStore, "user1", "pw1", "**");
    addUserPassword(userStore, "user2", "pw2", "**");
    try {
        userStore.start();
    } catch (Exception ex) {
        throw new RuntimeException("UserStore", ex);
    }
    // ---- Build server, start server.
    FusekiServer server = fuseki(port, userStore, authorizeSvc, datasetName, dsg);
    server.start();
    // ---- HttpClient connection with user and password basic authentication.
    Authenticator authenticator = AuthLib.authenticator("user1", "pw1");
    HttpClient client = HttpClient.newBuilder().authenticator(authenticator).connectTimeout(Duration.ofSeconds(10)).build();
    // ---- Use it.
    try (RDFConnection conn = RDFConnectionRemote.newBuilder().destination(URL).httpClient(client).build()) {
        // What can we see of the database? user1 can see g1 and the default graph
        System.out.println("\nFetch dataset");
        Dataset ds1 = conn.fetchDataset();
        RDFDataMgr.write(System.out, ds1, RDFFormat.TRIG_FLAT);
        // Get a graph.
        System.out.println("\nFetch named graph");
        Model m1 = conn.fetch("http://example/g1");
        RDFDataMgr.write(System.out, m1, RDFFormat.TURTLE_FLAT);
        // Get a graph. user tries to get a graph they have no permission for ==> 404
        System.out.println("\nFetch unexistent named graph");
        try {
            Model m2 = conn.fetch("http://example/g2");
        } catch (HttpException ex) {
            System.out.println(ex.getMessage());
        }
    }
    // Need to exit the JVM : there is a background server
    System.exit(0);
}
Also used : Dataset(org.apache.jena.query.Dataset) SecurityContextView(org.apache.jena.fuseki.access.SecurityContextView) FusekiServer(org.apache.jena.fuseki.main.FusekiServer) HttpException(org.apache.jena.atlas.web.HttpException) DatasetGraph(org.apache.jena.sparql.core.DatasetGraph) UserStore(org.eclipse.jetty.security.UserStore) AuthorizationService(org.apache.jena.fuseki.access.AuthorizationService) RDFConnection(org.apache.jena.rdfconnection.RDFConnection) HttpClient(java.net.http.HttpClient) Model(org.apache.jena.rdf.model.Model) HttpException(org.apache.jena.atlas.web.HttpException) Authenticator(java.net.Authenticator) SecurityRegistry(org.apache.jena.fuseki.access.SecurityRegistry)

Aggregations

Authenticator (java.net.Authenticator)1 HttpClient (java.net.http.HttpClient)1 HttpException (org.apache.jena.atlas.web.HttpException)1 AuthorizationService (org.apache.jena.fuseki.access.AuthorizationService)1 SecurityContextView (org.apache.jena.fuseki.access.SecurityContextView)1 SecurityRegistry (org.apache.jena.fuseki.access.SecurityRegistry)1 FusekiServer (org.apache.jena.fuseki.main.FusekiServer)1 Dataset (org.apache.jena.query.Dataset)1 Model (org.apache.jena.rdf.model.Model)1 RDFConnection (org.apache.jena.rdfconnection.RDFConnection)1 DatasetGraph (org.apache.jena.sparql.core.DatasetGraph)1 UserStore (org.eclipse.jetty.security.UserStore)1