Dans cet article


Offres d'emploi

Tags

Supprimer les jsessionid dans les url et pretty faces pour le référencement

Supprimer les jsessionid dans les url et pretty faces pour le référencement

Le problème des jsessionid dans les urls

Comportement des jsessionid

Ceci n’est pas un bug mais le fonctionnement de base de JEE qui crée une session. Ne sachant pas si le navigateur du client possède la fonctionnalité des cookies, java préfère passer la session dans l’url.

paramétre jsessionid dans les url

Problème pour le référencement

Pour le référencement ceci peut être panélisable car ceci crée des urls peu référencable. Afin de maximiser le référencement, il est donc préférable de supprimer la variable jsessionid des url générées par le serveur.

Pour réaliser cette suppression de paramètre, il existe une solution simple à partir d’un filter java.

La solution

Pour ce faire, il suffit de créer un filter comme expliqué dans l’excellent post suivant:

http://java.dzone.com/articles/java-jsessionid-harmful

Le filter java

Créer une classe java suivante:

public class URLSessionFilter implements Filter {

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		if (!(request instanceof HttpServletRequest)) {
			chain.doFilter(request, response);
			return;
		}

		HttpServletResponse httpResponse = (HttpServletResponse) response;

		HttpServletResponseWrapper wrappedResponse = new HttpServletResponseWrapper(
				httpResponse) {
			public String encodeRedirectUrl(String url) {
				return url;
			}

			public String encodeRedirectURL(String url) {
				return url;
			}

			public String encodeUrl(String url) {
				return url;
			}

			public String encodeURL(String url) {
				return url;
			}
		};
		chain.doFilter(request, wrappedResponse);
	}

	public void init(FilterConfig filterConfig) {
	}

	public void destroy() {
	}
}
 

Le fichier web.xml

Et renseigner ce filter dans votre web.xml:

<
filter>	    
	<
filter-name>URLSessionFilter<
/filter-name>
	<
filter-class>com.framework.filter.URLSessionFilter<
/filter-class>
<
/filter>

<
filter-mapping>
	<
filter-name>URLSessionFilter<
/filter-name>	    
	<
url-pattern>/*<
/url-pattern>
<
/filter-mapping> 

C’est tout! Le paramètre jsessionid disparait tout simplement des urls lors de la première connexion.

Filter et pretty faces

Attention néanmoins si vous utiliser pretty faces, il est important de placer ce filter avant le filter de prettry faces, sinon pretty-faces sera comme désactivé.

 

L'équipe AXOPEN

Voir aussi les articles suivants

JBOSS EAP – Déployer une application à la racine du serveur
Dans cet article, nous verrons comment déployer un archive war (un projet) à la racine du serveur JBOSS Le fichier jboss-web.xml Première étape, la plus simple, configurer dans votre fichier de déployement d’application jboss-web.xml pour que le pointe vers /. Voici un exemple simple de mon fichier jboss-web.xml < jboss-web> < context-root>< /context-root> < security-domain>java:/jaas/diagergo-security< /security-domain> < /jboss-web>   Si vous deployez votre application ainsi, vous obtiendrez une erreur de jboss vous expliquant qu’il existe déjà une application deployée sur le context-path root.
Lire l'article

Le multiselect avec Hibernate 4

Le multiselect avec Hibernate 4

Le 05/11/2013 par Pierre Liseron

Nous avons vu dans l’article « Les requêtes avec Hibernate 4 » comment réaliser une requête ramenant soit un champ soit tous les champs (SELECT *). Voyons à présent comment ramener plusieurs champs mais pas tous. Le code côté Hibernate Pour ce faire, nous avons recours à la fonction multiselect() de la classe CriteriaQuery. Cette fonction prend en paramètres soit une List de champs, soit n paramètres représentant des champs ou des fonctions.
Lire l'article

Les requêtes avec Hibernate 4

Les requêtes avec Hibernate 4

Le 02/10/2013 par Pierre Liseron

Hibernate 4 propose une syntaxe structurée qui permet d’exploiter la plupart des fonctionnalités du SQL. Cette syntaxe s’articule autour de quelques classes clés. Les classes clés pour construire une requête EntityManager L’EntityManager vous donne accès à votre PersistenceUnit, c’est-à-dire à votre base de données. C’est donc à partir de lui que seront construits tous les objets suivants. La configuration de la PersistenceUnit fera l’objet d’un autre article. CriteriaBuilder Le CriteriaBuilder est généré par l’EntityManager.
Lire l'article