Successfully reported this slideshow.
Your SlideShare is downloading. ×

Les Z'ApéroTech Toulouse #2 - Présentation des nouveautés de JakartaEE 8

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 19 Ad
Advertisement

More Related Content

Slideshows for you (20)

Similar to Les Z'ApéroTech Toulouse #2 - Présentation des nouveautés de JakartaEE 8 (20)

Advertisement

More from DocDoku (14)

Recently uploaded (20)

Advertisement

Les Z'ApéroTech Toulouse #2 - Présentation des nouveautés de JakartaEE 8

  1. 1. Jakarta EE 8 Principales Nouveautés
  2. 2. Jakarta EE 8 Les nouveautés 2
  3. 3. Historique 3
  4. 4. Usage de Jakarta EE 4 Serveurs d’applications Microservices
  5. 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. 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. 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. 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. 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. 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
  11. 11. JSON-Patch : Exemple 11 { "baz": "qux", "foo": "bar" } { "baz": "boo", "hello": ["world"] } [ { "op": "replace", "path": "/baz", "value": "boo" }, { "op": "add", "path": "/hello", "value": ["world"] }, { "op": "remove", "path": "/foo" } ]
  12. 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. 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. 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. 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. 16. Security : Custom IdentityStore 16 @ApplicationScoped public class MyIdentityStore implements IdentityStore { @Override public CredentialValidationResult validate( Credential credential) { // Validate credentials using the user service. } }
  17. 17. AuthenticationMechanism 17 @FormAuthenticationMechanismDefinition( loginToContinue = @LoginToContinue( loginPage="/login-servlet", errorPage="/error", useForwardToLoginExpression="$ {appConfig.forward}" ) )
  18. 18. Security : Custom Mechanism 18 @ApplicationScoped public class MyAM implements HttpAuthenticationMechanism { @Inject private IdentityStoreHandler idStoreHandler; @Override public AuthenticationStatus validateRequest(HttpServletRequest req, HttpServletResponse res, HttpMessageContext context) { CredentialValidationResult result = idStoreHandler.validate(new UsernamePasswordCredential( req.getParameter("name"), req.getParameter("password"))); if (result.getStatus() == VALID) { return context.notifyContainerAboutLogin(result); } else { return context.responseUnauthorized(); } } }
  19. 19. Merci

×