5. Les grandes familles de nouveautés
5
●Rafraîchissement global
Prise en compte Java SE 8, alignement entres modules
●Intégration des nouveaux standards Web
Server Sent Events
JSON-Patch
●Nouveaux modules
Security
6. Server Sent Events
6
Permet de faire du push
●Plus rustique que les web sockets mais HTTP
●Unidirectionnel (Serveur vers client)
●Connexion HTTP non fermée
●Content-Type « text/event-stream »
●Messages séparés par nn
event: stock
id: 1
data: {"dateTime":"2019-02-21T18:06:00.285","id":1,
"name":"GOOG","price":75.7119}
7. 2 nouvelles classes JAX-RS
7
Sse
●Classe utilitaire sert à créer des messages et des broadcasters
●Injecté avec @Context
●Pas de contrainte (variable de classe, paramètre)
●SseEventSink
●Représente une connexion (HTTP) à un client précis
●Injecté avec @Context
●Uniquement en paramètre de méthode de type « SSE »
8. Server Sent Events : API Java
8
@Path("prices")
public class StockTicker {
@Resource private ManagedExecutorService executor;
@Context private Sse sse;
@GET @Produces(MediaType.SERVER_SENT_EVENTS)
public void getQuotes(@Context SseEventSink sink) {
executor.execute(() -> {
...
sink.send(sse.newEvent(stockqoute));
...
});
}
}
9. Server Sent Events : SseBroadcaster
9
Broadcast à plusieurs clients (SseEventSink)
1.this.sseBroadcaster = sse.newBroadcaster();
2.this.sseBroadcaster.register(sseEventSink);
3.this.sseBroadcaster.broadcast(sseEvent);
10. JSON-Patch
10
Règle le problème de la mise à jour partielle
●Modifie une partie d’un document JSON
●S’utilise conjointement avec HTTP Patch
●RFC : https://tools.ietf.org/html/rfc6902
●6 opérations
●add
●replace
●remove
●move
●copy
●test
12. JSON-Patch : API Java
12
JsonPatchBuilder builder = new JsonPatchBuilder();
JsonArray result = builder.replace("/0/phones/mobile",
"650-111-2222")
.remove("/1")
.apply(target);
13. Java EE Security
13
La sécurité est l’aspect le moins standardisé de Java EE
●Pourtant beaucoup de standards JASPIC, JAAC, JAAS
●Mais les pratiques et les mécanismes évoluent vite
●Un bout coté application, un autre coté serveur
●Avant Java EE 8, la définition du stockage des utilisateurs n’était pas
portable
14. Java EE Security : le principe
14
●Définition de l’IdentityStore
●@DataBaseIdentityStoreDefinition
●@LdapIdentityStoreDefinition
●Ou personnalisé
●Définition de l’AuthenticationMechanism
●@BasicAuthenticationMechanismDefinition
●@FormAuthenticationMechanismDefinition
●Ou personnalisé
15. IdentityStore par configuration
15
@DataBaseIdentityStoreDefinition (
dataSourceLookup="java:global/primaryDB",
callerQuery=
"SELECT password FROM usr WHERE username=?",
groupsQuery="SELECT role FROM roles where
username=?", ...)
@LdapIdentityStoreDefinition(
url = "ldap://localhost:33389/",
callerBaseDn = "ou=caller,dc=jsr375,dc=net",
groupSearchBase = "ou=group,dc=jsr375,dc=net"
)
16. Security : Custom IdentityStore
16
@ApplicationScoped
public class MyIdentityStore implements IdentityStore {
@Override
public CredentialValidationResult validate(
Credential credential) {
// Validate credentials using the user service.
}
}