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

DocDoku
DocDokuCo-founder- DocDoku - We help industries digitize their business at DocDoku
Jakarta EE 8
Principales Nouveautés
Jakarta EE 8
Les nouveautés
2
Historique
3
Usage de Jakarta EE
4
Serveurs d’applications Microservices
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
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}
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 »
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));
...
});
}
}
Server Sent Events : SseBroadcaster
9
Broadcast à plusieurs clients (SseEventSink)
1.this.sseBroadcaster = sse.newBroadcaster();
2.this.sseBroadcaster.register(sseEventSink);
3.this.sseBroadcaster.broadcast(sseEvent);
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
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" }
]
JSON-Patch : API Java
12
JsonPatchBuilder builder = new JsonPatchBuilder();
JsonArray result = builder.replace("/0/phones/mobile",
"650-111-2222")
.remove("/1")
.apply(target);
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
Java EE Security : le principe
14
●Définition de l’IdentityStore
●@DataBaseIdentityStoreDefinition
●@LdapIdentityStoreDefinition
●Ou personnalisé
●Définition de l’AuthenticationMechanism
●@BasicAuthenticationMechanismDefinition
●@FormAuthenticationMechanismDefinition
●Ou personnalisé
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"
)
Security : Custom IdentityStore
16
@ApplicationScoped
public class MyIdentityStore implements IdentityStore {
@Override
public CredentialValidationResult validate(
Credential credential) {
// Validate credentials using the user service.
}
}
AuthenticationMechanism
17
@FormAuthenticationMechanismDefinition(
loginToContinue = @LoginToContinue(
loginPage="/login-servlet",
errorPage="/error",
useForwardToLoginExpression="$
{appConfig.forward}"
)
)
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();
}
}
}
Merci
1 of 19

Recommended

MIC QRS "JWT, la superstar pour sécuriser vos WebAPI" by
MIC QRS "JWT, la superstar pour sécuriser vos WebAPI"MIC QRS "JWT, la superstar pour sécuriser vos WebAPI"
MIC QRS "JWT, la superstar pour sécuriser vos WebAPI"Denis Voituron
68 views7 slides
Introduction à Angular JS by
Introduction à Angular JSIntroduction à Angular JS
Introduction à Angular JSAntoine Rey
14.9K views29 slides
LemonLDAP::NG et le support SAML2 by
LemonLDAP::NG et le support SAML2LemonLDAP::NG et le support SAML2
LemonLDAP::NG et le support SAML2Clément OUDOT
1.9K views23 slides
Concevoir, développer et sécuriser des micro-services avec Spring Boot by
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootDNG Consulting
2.7K views24 slides
Workshop Spring - Session 1 - L'offre Spring et les bases by
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les basesAntoine Rey
8.6K views28 slides
Sécurité MySQL by
Sécurité MySQLSécurité MySQL
Sécurité MySQLDamien Seguy
1.5K views26 slides

More Related Content

What's hot

LemonLDAP::NG et le support SAML2 (RMLL 2010) by
LemonLDAP::NG et le support SAML2 (RMLL 2010)LemonLDAP::NG et le support SAML2 (RMLL 2010)
LemonLDAP::NG et le support SAML2 (RMLL 2010)Clément OUDOT
1K views24 slides
Introduction à ajax by
Introduction à ajaxIntroduction à ajax
Introduction à ajaxAbdoulaye Dieng
1.6K views21 slides
Agenda formation OpenAM by
Agenda formation OpenAMAgenda formation OpenAM
Agenda formation OpenAMPascal Flamand
1.7K views5 slides
Workshop spring session 2 - La persistance au sein des applications Java by
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications JavaAntoine Rey
10.4K views22 slides
Introduction aux Web components (DNG Consulting) by
Introduction aux Web components (DNG Consulting)Introduction aux Web components (DNG Consulting)
Introduction aux Web components (DNG Consulting)DNG Consulting
1.4K views39 slides
Marzouk jsp by
Marzouk jspMarzouk jsp
Marzouk jspabderrahim marzouk
87 views24 slides

What's hot(20)

LemonLDAP::NG et le support SAML2 (RMLL 2010) by Clément OUDOT
LemonLDAP::NG et le support SAML2 (RMLL 2010)LemonLDAP::NG et le support SAML2 (RMLL 2010)
LemonLDAP::NG et le support SAML2 (RMLL 2010)
Clément OUDOT1K views
Workshop spring session 2 - La persistance au sein des applications Java by Antoine Rey
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
Antoine Rey10.4K views
Introduction aux Web components (DNG Consulting) by DNG Consulting
Introduction aux Web components (DNG Consulting)Introduction aux Web components (DNG Consulting)
Introduction aux Web components (DNG Consulting)
DNG Consulting1.4K views
Présentation GWT et HTML 5 pour l'Offline by DNG Consulting
Présentation GWT et HTML 5 pour l'OfflinePrésentation GWT et HTML 5 pour l'Offline
Présentation GWT et HTML 5 pour l'Offline
DNG Consulting2.2K views
Plus de flexibilité et de scalabilité chez Bouygues Télécom grâce à MongoDB by MongoDB
Plus de flexibilité et de scalabilité chez Bouygues Télécom grâce à MongoDBPlus de flexibilité et de scalabilité chez Bouygues Télécom grâce à MongoDB
Plus de flexibilité et de scalabilité chez Bouygues Télécom grâce à MongoDB
MongoDB1.6K views
Quoi de neuf à Devoxx France 2017 ? by Antoine Rey
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?
Antoine Rey9.7K views
Mettez du temps réel dans votre Drupal avec Node JS by Matthieu Guillermin
Mettez du temps réel dans votre Drupal avec Node JSMettez du temps réel dans votre Drupal avec Node JS
Mettez du temps réel dans votre Drupal avec Node JS
Matthieu Guillermin3.6K views
Workshop Spring - Session 5 - Spring Integration by Antoine Rey
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring Integration
Antoine Rey10.8K views
Node.js et les nouvelles technologies javascript by Khalid Jebbari
Node.js et les nouvelles technologies javascriptNode.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascript
Khalid Jebbari2.7K views
Importer des données dans Nuxeo Platform - Nuxeo Tour 2014 - workshop by Nuxeo
Importer des données dans Nuxeo Platform - Nuxeo Tour 2014 - workshopImporter des données dans Nuxeo Platform - Nuxeo Tour 2014 - workshop
Importer des données dans Nuxeo Platform - Nuxeo Tour 2014 - workshop
Nuxeo990 views
Workshop Spring - Session 4 - Spring Batch by Antoine Rey
Workshop Spring -  Session 4 - Spring BatchWorkshop Spring -  Session 4 - Spring Batch
Workshop Spring - Session 4 - Spring Batch
Antoine Rey12.2K views
2014.12.11 - TECH CONF #3 - Présentation Node.js by TelecomValley
2014.12.11 - TECH CONF #3 - Présentation Node.js2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js
TelecomValley1.1K views
Architecture java j2 ee a partager by aliagadir
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partager
aliagadir173 views

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

HTML5, Spring, NoSQL et mobilité by
HTML5, Spring, NoSQL et mobilitéHTML5, Spring, NoSQL et mobilité
HTML5, Spring, NoSQL et mobilitéJulien Dubois
7.5K views52 slides
12-Factor by
12-Factor12-Factor
12-FactorLuc Juggery
2.8K views24 slides
Audit Applications Javaee Solutions Linux Ow2 by
Audit Applications Javaee Solutions Linux Ow2Audit Applications Javaee Solutions Linux Ow2
Audit Applications Javaee Solutions Linux Ow2OW2
652 views27 slides
Audit Applications Javaee Solutions Linux Ow2 by
Audit Applications Javaee Solutions Linux Ow2Audit Applications Javaee Solutions Linux Ow2
Audit Applications Javaee Solutions Linux Ow2Catherine Nuel
879 views27 slides
HTML5 en projet by
HTML5 en projetHTML5 en projet
HTML5 en projetNormandy JUG
1.8K views29 slides
De l'Open Source à l'Open API (in French) by
De l'Open Source à l'Open API (in French)De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)Restlet
1.6K views51 slides

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

HTML5, Spring, NoSQL et mobilité by Julien Dubois
HTML5, Spring, NoSQL et mobilitéHTML5, Spring, NoSQL et mobilité
HTML5, Spring, NoSQL et mobilité
Julien Dubois7.5K views
Audit Applications Javaee Solutions Linux Ow2 by OW2
Audit Applications Javaee Solutions Linux Ow2Audit Applications Javaee Solutions Linux Ow2
Audit Applications Javaee Solutions Linux Ow2
OW2652 views
Audit Applications Javaee Solutions Linux Ow2 by Catherine Nuel
Audit Applications Javaee Solutions Linux Ow2Audit Applications Javaee Solutions Linux Ow2
Audit Applications Javaee Solutions Linux Ow2
Catherine Nuel879 views
De l'Open Source à l'Open API (in French) by Restlet
De l'Open Source à l'Open API (in French)De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)
Restlet1.6K views
Symfony with angular.pptx by Esokia
Symfony with angular.pptxSymfony with angular.pptx
Symfony with angular.pptx
Esokia3.1K views
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours by Horacio Gonzalez
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - CoursENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
Horacio Gonzalez754 views
Java dans Windows Azure, l'exemple de JOnAS by Guillaume Sauthier
Java dans Windows Azure, l'exemple de JOnASJava dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnAS
Guillaume Sauthier1.3K views
Java dans Windows Azure: l'exemple de Jonas by Microsoft
Java dans Windows Azure: l'exemple de JonasJava dans Windows Azure: l'exemple de Jonas
Java dans Windows Azure: l'exemple de Jonas
Microsoft611 views
REST JUG Toulouse 20100615 by JUG Toulouse
REST JUG Toulouse 20100615REST JUG Toulouse 20100615
REST JUG Toulouse 20100615
JUG Toulouse1.4K views
Introduction aux RIA (Rich Internet Applications) by Tugdual Grall
Introduction aux RIA (Rich Internet Applications)Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)
Tugdual Grall3.6K views
La plateforme de services dynamiques OSGi by Didier Donsez
La plateforme de services dynamiques OSGiLa plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
Didier Donsez3.7K views
Panel de solutions javascript by jp_mouton
Panel de solutions javascriptPanel de solutions javascript
Panel de solutions javascript
jp_mouton169 views
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile by Ippon
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Ippon3.3K views
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité by Julien Dubois
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilitéNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Julien Dubois3.2K views
Play framework - Human Talks Grenoble - 12.02.2013 by Xavier NOPRE
Play framework - Human Talks Grenoble - 12.02.2013Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013
Xavier NOPRE1.3K views
Nouveau look pour une nouvelle vie, version spéciale Ippon by Julien Dubois
Nouveau look pour une nouvelle vie, version spéciale IpponNouveau look pour une nouvelle vie, version spéciale Ippon
Nouveau look pour une nouvelle vie, version spéciale Ippon
Julien Dubois1.3K views
Aperçu de RequireJS by VISEO
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJS
VISEO2.5K views

More from DocDoku

Meetup Aperotech 4 : retour d'expérience Oracle Code One 2019 by
Meetup Aperotech 4 : retour d'expérience Oracle Code One 2019Meetup Aperotech 4 : retour d'expérience Oracle Code One 2019
Meetup Aperotech 4 : retour d'expérience Oracle Code One 2019DocDoku
233 views29 slides
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java by
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système JavaLes ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système JavaDocDoku
71 views17 slides
Les ZAPeroTech #4 : découverte de Flutter by
Les ZAPeroTech #4 : découverte de FlutterLes ZAPeroTech #4 : découverte de Flutter
Les ZAPeroTech #4 : découverte de FlutterDocDoku
237 views12 slides
Les ZAPeroTech #3 : à la découverte de NBitcoin en C# by
Les ZAPeroTech #3 : à la découverte de NBitcoin en C#Les ZAPeroTech #3 : à la découverte de NBitcoin en C#
Les ZAPeroTech #3 : à la découverte de NBitcoin en C#DocDoku
393 views29 slides
Les ZAperoTech #3 : présentation AWS IoT Greengrass by
Les ZAperoTech #3 : présentation AWS IoT GreengrassLes ZAperoTech #3 : présentation AWS IoT Greengrass
Les ZAperoTech #3 : présentation AWS IoT GreengrassDocDoku
367 views19 slides
Les Z'ApéroTech Toulouse #2 - Présentation de l'agilité à l'échelle by
Les Z'ApéroTech Toulouse #2 - Présentation de l'agilité à l'échelleLes Z'ApéroTech Toulouse #2 - Présentation de l'agilité à l'échelle
Les Z'ApéroTech Toulouse #2 - Présentation de l'agilité à l'échelleDocDoku
409 views34 slides

More from DocDoku(14)

Meetup Aperotech 4 : retour d'expérience Oracle Code One 2019 by DocDoku
Meetup Aperotech 4 : retour d'expérience Oracle Code One 2019Meetup Aperotech 4 : retour d'expérience Oracle Code One 2019
Meetup Aperotech 4 : retour d'expérience Oracle Code One 2019
DocDoku233 views
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java by DocDoku
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système JavaLes ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
DocDoku71 views
Les ZAPeroTech #4 : découverte de Flutter by DocDoku
Les ZAPeroTech #4 : découverte de FlutterLes ZAPeroTech #4 : découverte de Flutter
Les ZAPeroTech #4 : découverte de Flutter
DocDoku237 views
Les ZAPeroTech #3 : à la découverte de NBitcoin en C# by DocDoku
Les ZAPeroTech #3 : à la découverte de NBitcoin en C#Les ZAPeroTech #3 : à la découverte de NBitcoin en C#
Les ZAPeroTech #3 : à la découverte de NBitcoin en C#
DocDoku393 views
Les ZAperoTech #3 : présentation AWS IoT Greengrass by DocDoku
Les ZAperoTech #3 : présentation AWS IoT GreengrassLes ZAperoTech #3 : présentation AWS IoT Greengrass
Les ZAperoTech #3 : présentation AWS IoT Greengrass
DocDoku367 views
Les Z'ApéroTech Toulouse #2 - Présentation de l'agilité à l'échelle by DocDoku
Les Z'ApéroTech Toulouse #2 - Présentation de l'agilité à l'échelleLes Z'ApéroTech Toulouse #2 - Présentation de l'agilité à l'échelle
Les Z'ApéroTech Toulouse #2 - Présentation de l'agilité à l'échelle
DocDoku409 views
Les Z'ApéroTech Toulouse #2 - Présentation Garden Helaer by DocDoku
Les Z'ApéroTech Toulouse #2 - Présentation Garden HelaerLes Z'ApéroTech Toulouse #2 - Présentation Garden Helaer
Les Z'ApéroTech Toulouse #2 - Présentation Garden Helaer
DocDoku265 views
DocDokuPLM: Domain Specific PaaS and Business Oriented API by DocDoku
DocDokuPLM: Domain Specific PaaS and Business Oriented APIDocDokuPLM: Domain Specific PaaS and Business Oriented API
DocDokuPLM: Domain Specific PaaS and Business Oriented API
DocDoku2.7K views
DocDokuPLM presentation - OW2Con 2015 Community Award winner by DocDoku
DocDokuPLM presentation - OW2Con 2015 Community Award winnerDocDokuPLM presentation - OW2Con 2015 Community Award winner
DocDokuPLM presentation - OW2Con 2015 Community Award winner
DocDoku3.1K views
Présentation DocDoku by DocDoku
Présentation DocDokuPrésentation DocDoku
Présentation DocDoku
DocDoku563 views
Generic Open Source PLM solution by DocDoku
Generic Open Source PLM solutionGeneric Open Source PLM solution
Generic Open Source PLM solution
DocDoku4.6K views
DocDoku - Mobile Monday Toulouse 1ère : la NFC by DocDoku
DocDoku - Mobile Monday Toulouse 1ère : la NFCDocDoku - Mobile Monday Toulouse 1ère : la NFC
DocDoku - Mobile Monday Toulouse 1ère : la NFC
DocDoku4.2K views
DocDoku - Les enjeux du back-office mobile by DocDoku
DocDoku - Les enjeux du back-office mobileDocDoku - Les enjeux du back-office mobile
DocDoku - Les enjeux du back-office mobile
DocDoku1.5K views
Strategies et developpements mobiles multi-plates-formes. by DocDoku
Strategies et developpements mobiles multi-plates-formes.Strategies et developpements mobiles multi-plates-formes.
Strategies et developpements mobiles multi-plates-formes.
DocDoku2.1K views

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

  • 2. Jakarta EE 8 Les nouveautés 2
  • 4. Usage de Jakarta EE 4 Serveurs d’applications Microservices
  • 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
  • 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. 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. } }
  • 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. Merci