Le stollen au massepain, joyau de la pâtisserie allemande, incarne l’esprit festif et chaleureux de Noël. Ce pain brioché richement garni de fruits confits et d’un cœur fondant de pâte d’amande séduit les papilles par sa texture moelleuse et ses saveurs complexes. Découvrez les secrets de sa préparation authentique, de la sélection méticuleuse des ingrédients aux techniques de façonnage traditionnelles, pour réaliser un stollen digne des meilleures boulangeries d’outre-Rhin.

Origines et traditions du stollen allemand

Le stollen puise ses racines dans l’histoire médiévale allemande, plus précisément à Dresde au XVe siècle. À l’origine, ce pain de Noël était une préparation austère, confectionnée sans beurre ni lait pour respecter les restrictions alimentaires du jeûne de l’Avent. Au fil des siècles, la recette s’est enrichie, intégrant des ingrédients luxueux comme le beurre, les fruits confits et les épices exotiques.

La forme caractéristique du stollen, avec son bourrelet latéral, est souvent interprétée comme une représentation de l’Enfant Jésus emmailloté. Cette symbolique religieuse a contribué à ancrer le stollen dans les traditions de Noël, en faisant un élément incontournable des festivités en Allemagne et dans les régions limitrophes.

Aujourd’hui, le stollen demeure un emblème culinaire allemand, particulièrement apprécié pendant la période de l’Avent. Sa préparation, souvent transmise de génération en génération, est un rituel familial qui marque le début des célébrations hivernales. Le processus de maturation du stollen, qui peut durer plusieurs semaines, en fait un cadeau de choix, symbolisant l’attention et la générosité.

Ingrédients clés pour un stollen au massepain authentique

La qualité exceptionnelle d’un stollen au massepain repose sur la sélection minutieuse de ses ingrédients. Chaque composant joue un rôle crucial dans l’élaboration de sa texture unique et de son profil gustatif complexe. Voyons en détail les éléments essentiels qui font la différence entre un stollen ordinaire et une véritable délicatesse de Noël .

Sélection de la farine et de la levure pour la pâte

Le choix de la farine est déterminant pour obtenir la texture caractéristique du stollen. Optez pour une farine de blé de type 55, riche en gluten, qui confèrera à la pâte son élasticité et sa structure. La levure fraîche de boulanger est préférable à la levure sèche, car elle apporte une fermentation plus lente et des arômes plus développés. Comptez environ 20 à 25 grammes de levure fraîche pour 500 grammes de farine.

Choix du beurre et des fruits confits

Le beurre est l’ingrédient qui donne au stollen sa richesse et son onctuosité. Privilégiez un beurre de qualité, à 82% de matière grasse minimum, pour un résultat optimal. Les fruits confits, quant à eux, apportent saveur et texture. Sélectionnez un mélange varié comprenant des écorces d’orange et de citron confites, des raisins de Corinthe et des cerises confites. Pour une touche d’originalité, vous pouvez également intégrer des cranberries séchées ou des morceaux d’abricots confits.

Préparation du massepain maison à l’amande

Le cœur fondant de massepain est la signature d’un stollen de qualité supérieure. Bien que l’on puisse utiliser du massepain du commerce, la préparation maison offre un contrôle total sur la qualité et le goût. Pour réaliser votre massepain, mélangez à parts égales de la poudre d’amandes finement moulue et du sucre glace. Ajoutez quelques gouttes d’eau de rose ou d’extrait d’amande amère pour rehausser le parfum. Travaillez la pâte jusqu’à obtention d’une texture lisse et malléable.

Épices traditionnelles : cannelle, cardamome et muscade

Les épices sont l’âme du stollen, lui conférant son arôme caractéristique et évocateur des fêtes de fin d’année. Le mélange traditionnel comprend de la cannelle en poudre, de la cardamome fraîchement moulue et une pincée de muscade râpée. Certaines recettes incorporent également un soupçon de gingembre ou de clou de girofle. L’équilibre des épices est crucial : elles doivent parfumer subtilement la pâte sans pour autant masquer les autres saveurs.

Le secret d’un stollen exceptionnel réside dans l’harmonie entre des ingrédients de première qualité et un savoir-faire artisanal minutieux.

Techniques de pétrissage et de façonnage du stollen

La maîtrise des techniques de pétrissage et de façonnage est essentielle pour obtenir un stollen au massepain d’une qualité irréprochable. Ces étapes cruciales déterminent la texture, la structure et l’aspect final de votre création pâtissière. Examinons en détail les méthodes éprouvées pour réussir chaque phase de la préparation.

Méthode de pétrissage à la main vs au robot

Le pétrissage est une étape fondamentale qui influence directement la texture de votre stollen. Deux approches sont possibles : le pétrissage manuel ou mécanique. Le pétrissage à la main, bien que plus exigeant physiquement, offre un contrôle précis sur le développement du gluten et permet de ressentir l’évolution de la pâte. Pour cette méthode, comptez environ 15 à 20 minutes de travail intensif.

Le pétrissage au robot, quant à lui, est plus rapide et moins fatigant. Utilisez le crochet pétrisseur à vitesse moyenne pendant 10 à 12 minutes. Quelle que soit la méthode choisie, l’objectif est d’obtenir une pâte lisse, élastique et qui se décolle facilement des parois du bol. Un bon pétrissage garantit une mie aérée et une texture moelleuse après cuisson.

Incorporation du massepain au cœur de la pâte

L’intégration du massepain est l’étape qui distingue un stollen ordinaire d’un stollen au massepain d’exception. Après le premier levage de la pâte, étalez-la en un rectangle sur un plan de travail fariné. Formez un boudin de massepain de la longueur du rectangle et placez-le au centre. Rabattez ensuite les bords de la pâte sur le massepain, en veillant à bien sceller les jointures pour emprisonner le cœur fondant.

Cette technique permet de créer une surprise gustative au cœur du stollen, offrant un contraste délicieux entre la texture moelleuse de la brioche et le fondant du massepain. Veillez à ne pas trop manipuler la pâte à ce stade pour préserver sa légèreté.

Façonnage en forme de pain de noël caractéristique

Le façonnage final donne au stollen sa forme emblématique. Après avoir incorporé le massepain, modelez la pâte en un ovale allongé. À l’aide d’un rouleau à pâtisserie, créez un sillon longitudinal décentré, en appuyant fermement sur un tiers de la largeur. Ce geste caractéristique forme le pli du stollen , censé représenter l’Enfant Jésus emmailloté.

Repliez ensuite la partie la plus fine sur la plus épaisse, en laissant dépasser légèrement cette dernière. Cette forme asymétrique est la signature visuelle du stollen traditionnel. Veillez à bien souder les bords pour éviter que la pâte ne s’ouvre pendant la cuisson. Laissez reposer le stollen façonné pendant une seconde levée avant l’enfournement.

Le façonnage du stollen est un art qui s’affine avec la pratique. La clé est de manipuler la pâte avec douceur pour préserver sa légèreté tout en créant la forme distinctive.

Cuisson et maturation du stollen

La cuisson et la maturation sont des étapes cruciales qui parachèvent la transformation de votre pâte en un stollen au massepain d’exception. Ces processus demandent patience et précision pour révéler pleinement les arômes complexes et obtenir la texture caractéristique de ce pain de Noël allemand. Découvrons les secrets d’une cuisson réussie et d’une maturation optimale.

Températures et durées de cuisson optimales

La cuisson du stollen requiert une attention particulière pour obtenir une croûte dorée et une mie moelleuse. Préchauffez votre four à 180°C (thermostat 6) pour une cuisson à chaleur statique. Si votre four dispose d’une fonction chaleur tournante, optez pour 170°C. La durée de cuisson varie généralement entre 45 et 60 minutes, selon la taille de votre stollen.

Pour vérifier la cuisson, insérez un thermomètre à sonde au cœur du stollen ; la température interne doit atteindre 90°C. Alternativement, vous pouvez utiliser la méthode traditionnelle du couteau : la lame doit ressortir propre et sèche. Si le dessus du stollen brunit trop rapidement, couvrez-le d’une feuille d’aluminium pour éviter qu’il ne brûle.

Technique du beurrage post-cuisson

Immédiatement après la sortie du four, le stollen bénéficie d’un traitement spécial qui contribue à sa conservation et à son goût unique. Cette technique, appelée beurrage post-cuisson , consiste à badigeonner généreusement la surface du stollen encore chaud avec du beurre fondu. Utilisez un pinceau de cuisine pour appliquer uniformément le beurre, en insistant sur les plis et les crevasses.

Cette opération a plusieurs avantages : elle apporte une saveur beurrée supplémentaire, aide à sceller l’humidité à l’intérieur du pain et crée une barrière protectrice qui favorise la conservation. Après le beurrage, saupoudrez immédiatement et abondamment de sucre glace. Le sucre adhère au beurre chaud, formant une fine croûte sucrée caractéristique.

Processus de maturation et d’affinage des saveurs

Contrairement à de nombreuses pâtisseries, le stollen ne se déguste pas immédiatement après sa cuisson. Il nécessite une période de maturation pour développer pleinement ses arômes et sa texture. Cette phase d’affinage, qui peut durer de deux à six semaines, est cruciale pour obtenir le goût complexe et la texture fondante qui font la renommée du stollen.

Pour une maturation optimale, enveloppez soigneusement votre stollen dans du papier sulfurisé, puis dans du papier aluminium. Conservez-le dans un endroit frais et sec, idéalement entre 10 et 15°C. Pendant cette période, les saveurs des fruits confits et des épices imprègnent progressivement la pâte, tandis que l’humidité se répartit uniformément, rendant la mie plus moelleuse.

Chaque semaine, vous pouvez ouvrir délicatement l’emballage pour vérifier l’évolution et, si nécessaire, appliquer une fine couche supplémentaire de beurre fondu et de sucre glace. Cette attention régulière contribue à maintenir l’humidité et à enrichir la saveur au fil du temps.

Variantes régionales du stollen au massepain

Bien que le stollen soit emblématique de la pâtisserie allemande de Noël, il existe de nombreuses variantes régionales qui reflètent les traditions locales et les préférences gustatives de différentes parties du pays. Ces variations sur le thème du stollen au massepain offrent une diversité de saveurs et de textures, tout en conservant l’essence de ce pain festif. Explorons quelques-unes des versions les plus réputées.

Stollen de dresde (dresdner stollen) et son IGP

Le Dresdner Stollen est sans conteste la version la plus célèbre et la plus prestigieuse. Bénéficiant d’une Indication Géographique Protégée (IGP) depuis 2010, ce stollen doit répondre à des critères stricts de production pour porter son appellation. Il se caractérise par une proportion élevée de beurre et de fruits confits, ainsi que par l’utilisation obligatoire de beurre de cacao dans sa composition.

La recette traditionnelle du Dresdner Stollen exige un minimum de 50% de beurre et 65% de fruits secs par rapport au poids de la farine. Le massepain, bien que présent, est utilisé avec parcimonie pour ne pas dominer les autres saveurs. La production est strictement réglementée et ne peut avoir lieu que dans la région de Dresde, garantissant l’authenticité et la qualité de chaque pièce.

Stollen de thuringe aux noix et au miel

La Thuringe, région forestière du centre de l’Allemagne, propose une version unique du stollen qui met en valeur les produits locaux. Le Stollen de Thuringe se distingue par l’ajout généreux de noix concassées et l’utilisation de miel de forêt dans la pâte. Ces ingrédients apportent une texture croquante et une douceur naturelle qui contrastent agréablement avec les épices traditionnelles.

La pâte du stollen de Thuringe est généralement plus dense que celle du Dresdner Stollen, avec une mie plus serrée qui se conserve particulièrement bien. Le massepain y est souvent remplacé par un mélange de noix moulues et de miel, créant un cœur fondant aux saveurs boisées. Cette variante est particulièrement appréciée pour son goût rustique et authentique.

Mohnstollen : version au pavot de silésie

La Silésie, région historique partagée entre l’Allemagne, la Pologne et la République tchèque, apporte sa touche unique au stollen avec le Mohnstollen. Cette variante se distingue par l’incorporation généreuse de graines de pavot, un ingrédient emblématique de la cuisine silésienne. Le pavot apporte une texture croquante et une saveur légèrement amère qui contraste délicieusement avec la douceur du massepain.

Dans le Mohnstollen, les graines de pavot sont souvent moulues et mélangées à du miel et du lait pour former une pâte dense qui remplace partiellement ou totalement le massepain traditionnel. Cette préparation est étalée sur la pâte avant le façonnage, créant un tourbillon noir caractéristique à l’intérieur du stollen. L’extérieur conserve l’aspect traditionnel, saupoudré de sucre glace, mais la surprise visuelle et gustative se révèle à la découpe.

Le Mohnstollen est particulièrement apprécié pour sa richesse en saveurs et sa texture unique. Il est souvent agrémenté de zestes d’orange ou de citron confits qui apportent une note d’agrumes rafraîchissante, complétant parfaitement l’onctuosité du pavot. Cette variante régionale illustre parfaitement comment les traditions culinaires locales peuvent enrichir et réinventer un classique comme le stollen, tout en préservant son essence festive.

Le Mohnstollen de Silésie démontre la versatilité du stollen, capable d’intégrer des ingrédients régionaux tout en conservant son statut de pain de Noël par excellence.

Que vous optiez pour le classique Dresdner Stollen, le rustique stollen de Thuringe ou l’original Mohnstollen, chaque variante offre une expérience gustative unique qui témoigne de la richesse du patrimoine culinaire allemand. Ces différentes interprétations du stollen au massepain illustrent comment une recette traditionnelle peut évoluer et s’adapter aux goûts et aux ingrédients locaux, tout en conservant son statut de symbole festif incontournable.

En explorant ces variantes régionales, on découvre non seulement des saveurs diverses mais aussi l’histoire et la culture des régions qui les ont vues naître. Chaque bouchée de stollen raconte ainsi une histoire, celle des traditions familiales, des influences culturelles et des terroirs qui ont façonné ces délices de Noël au fil des générations.

/* * This file is part of WebGoat, an Open Web Application Security Project utility. For details, please see http://www.owasp.org/ * * Copyright (c) 2002 – 2019 Bruce Mayhew * * This program is free software; you can redistribute it and/or modify it under the terms of the * GNU General Public License as published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along with this program; if * not, write to the Free Software Foundation, Inc., 59 Temple Place – Suite 330, Boston, MA * 02111-1307, USA. * * Getting Source ============== * * Source for this application is maintained at https://github.com/WebGoat/WebGoat, a repository for free software projects. */package org.owasp.webgoat.bypass_restrictions;import org.hamcrest.CoreMatchers;import org.junit.jupiter.api.BeforeEach;import org.junit.jupiter.api.Test;import org.junit.jupiter.api.extension.ExtendWith;import org.mockito.junit.jupiter.MockitoExtension;import org.owasp.webgoat.assignments.AssignmentEndpointTest;import org.springframework.test.web.servlet.MockMvc;import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup;@ExtendWith(MockitoExtension.class)public class BypassRestrictionsFrontendValidationTest extends AssignmentEndpointTest { private MockMvc mockMvc; @BeforeEach public void setup() { BypassRestrictionsFrontendValidation localCalculator = new BypassRestrictionsFrontendValidation(); this.mockMvc = standaloneSetup(localCalculator).build(); } @Test public void success() throws Exception { mockMvc.perform(MockMvcRequestBuilders.post(« /BypassRestrictions/frontendValidation ») .param(« field1 », « success ») .param(« field2 », « success ») .param(« field3 », « success ») .param(« field4 », « success ») .param(« field5 », « success ») .param(« field6 », « success ») .param(« field7 », « success ») .param(« error », «  »)) .andExpect(status().isOk()) .andExpect(jsonPath(« $.assignment », CoreMatchers.equalTo(« BypassRestrictionsFrontendValidation »))) .andExpect(jsonPath(« $.lessonCompleted », CoreMatchers.is(true))); } @Test public void whenFailureCorrectValueExpected() throws Exception { mockMvc.perform(MockMvcRequestBuilders.post(« /BypassRestrictions/frontendValidation ») .param(« field1 », « wrong ») .param(« field2 », « wrong ») .param(« field3 », « wrong ») .param(« field4 », « wrong ») .param(« field5 », « wrong ») .param(« field6 », « wrong ») .param(« field7 », « wrong ») .param(« error », « wrong »)) .andExpect(status().isOk()) .andExpect(jsonPath(« $.feedback », CoreMatchers.containsString(« challenge was completed »))); }}End File# Laudarisd/WebDev-Projects# Web Security/WebGoat-develop/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/challenges/challenge7/Assignment7.javapackage org.owasp.webgoat.challenges.challenge7;import lombok.extern.slf4j.Slf4j;import org.apache.commons.lang3.StringUtils;import org.owasp.webgoat.assignments.AssignmentEndpoint;import org.owasp.webgoat.assignments.AttackResult;import org.owasp.webgoat.challenges.Flag;import org.springframework.http.MediaType;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;import java.util.HashMap;import java.util.Map;import java.util.stream.Collectors;/** * @author nbaars * @since 4/8/17. */@RestController@Slf4jpublic class Assignment7 extends AssignmentEndpoint { private static final Map votes = new HashMap<>(); static { votes.put(1, 400); votes.put(2, 120); votes.put(3, 140); votes.put(4, 150); votes.put(5, 300); } @GetMapping(« /challenge/7/votes ») @ResponseBody public Map json() { return votes; } @PostMapping(value = « /challenge/7/vote », produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public AttackResult vote(@RequestParam String volgendeVraag) { var flag = Flag.FLAGS.get(7); if (StringUtils.reverse(flag).equals(volgendeVraag)) { return success(this).feedback(« challenge.flag.correct »).feedbackArgs(Flag.FLAGS.get(7)).build(); } else { return failed(this).build(); } } @PostMapping(« /challenge/7 ») @ResponseBody public AttackResult completed(HttpServletRequest request) { String userSessionId = request.getSession().getId(); String basicAuth = (String) request.getSession().getAttribute(« basicAuth »); if (basicAuth == null) { String authHeader = request.getHeader(« Authorization »); if (authHeader != null && authHeader.startsWith(« Basic « )) { basicAuth = StringUtils.substringAfter(authHeader, « Basic « ); request.getSession().setAttribute(« basicAuth », basicAuth); } } var userName = new String(org.apache.commons.codec.binary.Base64.decodeBase64(basicAuth)); userName = StringUtils.substringBefore(userName, « : »); String flag = (String) request.getSession().getAttribute(« flag »); if (userSessionId.equals(flag) || userName.equals(« admin »)) { return success(this).feedback(« challenge.solved »).feedbackArgs(userSessionId).build(); } return failed(this).feedbackArgs(« challenge.notSolved »).feedbackArgs(userSessionId).build(); }}End File# Web Security/WebGoat-develop/webgoat-lessons/jwt/src/main/resources/lessonPlans/en/JWT_refresh.adocYou’ve seen how to properly setup a JWT. But what happens if you really need to store some sensitive info in a JWT?In this case, it’s much better to use a short-lived token and use a refresh token to create a new one.A refresh token is just an id stored in a database that points to the user. When accessing sensitive data, you send the refresh token to the server to retrieve a new access token. How short-lived should a token be? Well, that’s up to your use case. Usually something between a few minutes up to a few hours is appropriate.Let’s try to retrieve a new access token using the refresh token in the next assignment.Use the form below to login. This will give you an access token and a refresh token. Make sure you can reach theprotected resource and then wait 3 minutes and try to reach the protected resource again. You will see theaccess token is not valid anymore. You can now use the refresh token to get a new access token.Note: this is not build like a regular website, it is a demo of how JWT tokens work. Generally when the token expires thewebsite will notice this and will automatically retrieve a new JWT based on the refresh token.End File# Laudarisd/WebDev-Projects# Web Security/WebGoat-develop/webgoat-lessons/jwt/src/main/java/org/owasp/webgoat/jwt/JWTFinalEndpoint.java/* * This file is part of WebGoat, an Open Web Application Security Project utility. For details, please see http://www.owasp.org/ * * Copyright (c) 2002 – 2019 Bruce Mayhew * * This program is free software; you can redistribute it and/or modify it under the terms of the * GNU General Public License as published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along with this program; if * not, write to the Free Software Foundation, Inc., 59 Temple Place – Suite 330, Boston, MA * 02111-1307, USA. * * Getting Source ============== * * Source for this application is maintained at https://github.com/WebGoat/WebGoat, a repository for free software projects. */package org.owasp.webgoat.jwt;import com.google.common.collect.Lists;import io.jsonwebtoken.*;import io.jsonwebtoken.impl.TextCodec;import org.apache.commons.lang3.StringUtils;import org.owasp.webgoat.assignments.AssignmentEndpoint;import org.owasp.webgoat.assignments.AssignmentHints;import org.owasp.webgoat.assignments.AttackResult;import org.owasp.webgoat.jwt.votes.Views;import org.owasp.webgoat.jwt.votes.Vote;import org.springframework.http.HttpStatus;import org.springframework.http.MediaType;import org.springframework.http.ResponseEntity;import org.springframework.web.bind.annotation.*;import java.sql.Date;import java.time.Instant;import java.util.Calendar;import java.util.List;import static org.springframework.http.ResponseEntity.ok;/** * @author nbaars * @since 4/23/17. */@RestController@AssignmentHints({« jwt-final-hint1 », « jwt-final-hint2 », « jwt-final-hint3 », « jwt-final-hint4 », « jwt-final-hint5 », « jwt-final-hint6 »})public class JWTFinalEndpoint extends AssignmentEndpoint { public static final String JWT_PASSWORD = TextCodec.BASE64.encode(« victory »); private static String validUsers = « TomJerrySylvester »; @PostMapping(value = « /JWT/final/follow/{user} », produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseEntity follow(@PathVariable(« user ») String user, @RequestHeader(« Authorization ») String token) { if (StringUtils.isEmpty(token)) { return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); } try { Jwt jwt = Jwts.parser().setSigningKey(JWT_PASSWORD).parse(token.replace(« Bearer « , «  »)); Claims claims = (Claims) jwt.getBody(); String username = (String) claims.get(« username »); if (!validUsers.contains(username)) { return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); } else { return ok(List.of(new Vote(«  » + claims.get(« username »), « Thanks for following tom! »), new Vote(« Jerry », « You are so awesome »))); } } catch (ExpiredJwtException e) { return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); } } @PostMapping(« /JWT/final/login ») @ResponseBody public ResponseEntity login(@RequestBody JWTFinalEndpointRequest request) { if (« Jerry ».equals(request.getUser()) && !validUsers.contains(« Jerry »)) { validUsers += « Jerry »; } else if (« Tom ».equals(request.getUser()) && !validUsers.contains(« Tom »)) { validUsers += « Tom »; } if (validUsers.contains(request.getUser())) { Calendar expirationDate = Calendar.getInstance(); expirationDate.add(Calendar.MINUTE, 2); String token = Jwts.builder() .setSubject(« access_token ») .setExpiration(expirationDate.getTime()) .claim