Modifier le fichier

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éDescriptionValeurs possiblesValeur par défaut
header.front.referrer-policyValeur du header Referrer-PolicyChaîne de caractères (cf MDN)no-referrer
header.front.x-content-type-optionsValeur du header X-Content-Type-OptionsChaîne de caractères (cf MDN)nosniff
header.front.content-security-policyValeur du header Content-Security-PolicyChaî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 AbstractHttpHeaderPreparer et implémenter la méthode accept et/ou prepare selon 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>
...