pac4j module
Authentication module via: Pac4j 2.x.
exports
- Pac4j
UserProfile
object - Pac4j
Config
object - Pac4j
WebContext
object - Pac4j
ProfileManager
object - Routes for Pac4j callback, security filter and logout
dependency
<dependency>
<groupId>org.jooby</groupId>
<artifactId>jooby-pac4j2</artifactId>
<version>1.6.6</version>
</dependency>
usage
Display a basic login-form and restrict access to all the routes defined after the Pac4j module:
{
get("/public", () -> {
...
});
use(new Pac4j());
get("/private", () -> {
...
});
}
clients
A Client represents an authentication mechanism. It performs the login process and returns (if successful) a user profile
Clients are configured at bootstrap time using the Pac4j DSL:
{
use(new Pac4j()
.client(conf -> {
return new FacebookClient(conf.getString("fb.key"), conf.getString("fb.secret"));
})
);
}
You can chain calls to add multiple clients:
{
use(new Pac4j()
.client(conf -> {
return new FormClient("/login", new SimpleTestSimpleTestUsernamePasswordAuthenticator());
})
.client(conf -> {
return new FacebookClient(conf.getString("fb.key"), conf.getString("fb.secret"));
})
.client(conf -> {
return new TwitterClient(conf.getString("twitter.key"), conf.getString("twitter.secret"));
})
);
}
protecting urls
By default Pac4j restrict access to all the routes defined after the Pac4j module. You can specify what url must be protected using a path pattern:
{
use(new Pac4j()
.client("/admin/**", conf -> {
return new FormClient("/login", new SimpleTestSimpleTestUsernamePasswordAuthenticator());
}));
}
Now all the routes under /admin
are protected by Pac4j.
user profile
After login the user profile (current logged user) is accessible via require
calls:
{
use(new Pac4j().form());
get("/profile", () -> {
CommonProfile profile = require(CommonProfile.class);
...
});
}
Access to specific profile type depends on the authentication client:
{
use(new Pac4j()
.client(conf -> {
return new FacebookClient(conf.getString("fb.key"), conf.getString("fb.secret"));
})
);
get("/profile", () -> {
FacebookProfile profile = require(FacebookProfile.class);
...
});
}
Pac4j API is also available:
{
use(new Pac4j()
.client(conf -> {
return new FacebookClient(conf.getString("fb.key"), conf.getString("fb.secret"));
})
);
get("/profile", req -> {
ProfileManager pm = require(ProfileManager.class);
List<Commonprofile> profiles = pm.getAll(req.ifSession().isPresent());
...
});
}
authorizer
Authorizers are provided via client
DSL. You can provider an instance of an auhtorizer or class reference to an authorizer.
{
use(new Pac4j()
.client("*", MyAuthorizer.class, conf -> {
return new FacebookClient(conf.getString("fb.key"), conf.getString("fb.secret"));
})
);
}
Here MyAuthorizer
will be provisioned by Guice.
advanced usage
For advanced usage is available via doWith method:
{
use(new Pac4j()
.doWith(pac4j -> {
pac4j.setSecurityLogic(...);
pac4j.setHttpActionAdapter(...);
})
);
}
starter project
We do provide a pac4j-starter project. Go and fork it.
That’s all folks!!
pac4j.conf
These are the default properties for pac4j2:
pac4j {
# default callback, like http://localhost:8080/auth
callback {
method = "*"
path = /callback
url = "http://"${application.host}":"${application.port}${application.path}${pac4j.callback.path}
renewSession = false
redirectTo = ""
}
# security filters
securityFilter {
method = "*"
}
# logout options
logout {
path = /logout
redirectTo = ${application.path}
method = "*"
pattern = "/.*"
destroySession = true
local = true
central = false
}
excludePaths = ["/favicon.ico"]
}