Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

47 views

Published on

Les nouveautés de la plateforme #JavaEE ou plutôt #JakartaEE 8 - par @Florent Garin

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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

×