Entêtes HTTP du document principal
Lors de l'affichage d'une page, des entêtes Http sont automatiquement ajoutés à la réponse lors de l'appel de la méthode utilitaire
ViewModelHelper.prepareViewModel.
Le mécanisme se base sur une liste de préparateurs qui s'appliquent selon le contexte d'affichage.
Une fois le modèle préparé, le système va itérer sur les beans de type HttpHeaderPreparer et appliquer tous ceux qui acceptent le contexte.
Entêtes produit
Le produit ajoute 3 entêtes sur tous les documents affichés.
- Un entête Referrer-Policy
- Un entête X-Content-Type-Options
- Un entête Content-Security-Policy
Propriétés
Les valeurs écrites dans les entêtes peuvent êtres surchagées en projet si besoin
| Propriété | Description | Valeurs possibles | Valeur par défaut |
|---|---|---|---|
| header.front.referrer-policy | Valeur du header Referrer-Policy | Chaîne de caractères (cf MDN) | no-referrer |
| header.front.x-content-type-options | Valeur du header X-Content-Type-Options | Chaîne de caractères (cf MDN) | nosniff |
| header.front.content-security-policy | Valeur du header Content-Security-Policy | Chaîne de caractères (cf MDN) | default-src 'self' 'unsafe-inline'; img-src https://* data: |
Mise en oeuvre d'un nouvel entête
Une classe abstraite permet de stocker le nom du header et la valeur à ajouter et propose une implémentation simple permettant d'ajouter le header dans la réponse.
Pour déclarer un header à ajouter inconditionnellement sur le document principal, il suffit simplement de déclarer un bean de type DefaultHttpHeaderPreparer.
...
<bean id="<<ID_DU_BEAN>>" class="com.kosmos.http.header.DefaultHttpHeaderPreparer">
<property name="name" value="<<NOM_DE_L_ENTETE>>"/>
<property name="value" value="<<VALEUR_DE_L_ENTETE>>"/>
</bean>
...
Ce header sera alors automatiquement ajouté dans la réponse.
Parfois, la valeur du header dépend du contexte ou ne doit pas être systématiquement ajoutée. Dans ce cas, il faut
- Créer une classe qui étend
AbstractHttpHeaderPrepareret implémenter la méthodeacceptet/ouprepareselon le besoin.
...
public class MonHeaderSpecifiqueHttpHeaderPreparer extends AbstractHttpHeaderPreparer {
@Override
public boolean accept(FrontContext context) {
return conditionEstRemplie(context);
}
@Override
public void prepare(final FrontContext context, final HttpServletResponse response) {
response.setHeader(name, calculerValeurHeader(context));
}
...
}
- Déclarer le bean dans le fichier de contexte du projet.
...
<bean id="<<ID_DU_BEAN>>" class="com.kosmos.xxx.yyy.MonHeaderSpecifiqueHttpHeaderPreparer">
<property name="name" value="<<NOM_DE_L_ENTETE>>"/>
<property name="monService" ref="monService"/>
...
</bean>
...