IKI Project

Aller au contenu | Aller au menu | Aller à la recherche

samedi, septembre 12 2009

JSTL locale et Struts2

Struts2 propose de base l'interceptor i18n. Celui-ci permet de changer la locale utilisée par les tags <s:text> et les fonctions getText(String key) de vos actions. Au lieu d'utiliser la valeur que votre navigateur fournit dans la requête http, si cet interceptor est défini dans la stack, c'est la valeur du paramètre "request_locale" de la requête qui est pris en compte.

L'interceptor fonctionne très bien si seul les tags struts sont utilisés ... mais pour les tags <fmt:message> il en est autrement ! De même, si vous utilisez struts-menu, qui se base également sur la locale de JSTL, l'interceptor n'aura aucun effet sur vos menus.

Voici une classe qui se base sur l'interceptor de struts et qui positionne la locale pour JSTL :

import java.util.Locale;
import java.util.Map;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.I18nInterceptor;
 
/**
 * The Class JstlI18nInterceptor.
 */
public class JstlI18nInterceptor extends I18nInterceptor {
 
	/** The Constant serialVersionUID. */
	private static final long serialVersionUID = -6925616454174624288L;
 
	/** The Constant FMT_LOCALE_SESSION_KEY. */
	private static final String FMT_LOCALE_SESSION_KEY = "javax.servlet.jsp.jstl.fmt.locale.session";
 
	/* (non-Javadoc)
	 * @see com.opensymphony.xwork2.interceptor.I18nInterceptor#saveLocale(com.opensymphony.xwork2.ActionInvocation, java.util.Locale)
	 */
	@Override
	protected void saveLocale(ActionInvocation invocation, Locale locale) {
		super.saveLocale(invocation, locale);
		// Set fmt locale
		Map<String, Object> session = invocation.getInvocationContext()
				.getSession();
		session.put(FMT_LOCALE_SESSION_KEY, locale);
	}
 
}

Il n'y avait vraiment pas grand chose à modifier ^^, mais cela m'a tout de même demandé un petit peu de temps avant de trouver une solution viable.

lundi, septembre 7 2009

Eviter les java.lang.OutOfMemoryException en utilisant les références

En java, on dit souvent qu'il n'est pas nécessaire de se préoccuper de la gestion de la mémoire ... jusqu'au moment ou l'on tombe sur le fameux java.lang.OutOfMemoryException !

Pourtant, Il existe plusieurs types de références en java :

  • Strong
  • SoftReference
  • WeakReference
  • PhantomReference

Celles-ci permettent un certain contrôle sur les objets en référence, quant au moment où le "garbage collector" va libérer ou non la mémoire correspondante aux objets qui leur sont associés.

Avant de modifier le paramètre -Xmx de la jvm, il peut être intéressant de se renseigner sur les classes que contient le package java.lang.ref.

Plus de détails quant à l'utilisation de ces objets : http://blog.developpez.com/adiguba/...

vendredi, septembre 4 2009

Outils pratiques pour serveur dédié

Introduction

Cela fait maintenant quelques années que j'héberge mes services (http, ftp mail ...) sur un serveur dédié dans une distribution Debian. Avec le temps, j'ai découvert un certain nombre d'outils, que l'on ne pense pas toujours à installer, mais qui me semblent indispensables lorsque l'on administre soit même un serveur. Dans ce billet, je vous ferais une présentation rapide de ceux ci. Vous trouverez facilement sur internet des "how-to" pour les installer.

Sécurité

fail2ban

Cet outil permet d'ajouter dynamiquement des règles iptables afin de bloquer les IP à partir desquelles plusieurs tentatives de connexion auraient échouées. Cela permet de stopper les attaques par brute force sur le serveur. Fail2ban scrute les logs des services ssh, apache, proftpd, bind .. et bien d'autres pour détecter les différentes tentatives de connexion en échec.

Avant d'installer cet outil, certains logs de mon serveur étaient remplis d'erreurs suspectes. Faites donc un "tail -f /var/log/auth.log", si un ssh est ouvert sur votre serveur, vous verrez certainement un certain nombre de lignes telle que :

Sep  2 19:22:01 Pluton sshd9118: Did not receive identification string from 80.98.202.163
Sep  2 19:36:04 Pluton sshd9297: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=catv-80-98-202-163.catv.broadband.hu  user=root
Sep  2 19:36:06 Pluton sshd9297: Failed password for root from 80.98.202.163 port 60052 ssh2
Sep  2 19:36:07 Pluton sshd9301: Invalid user admin from 80.98.202.163
Sep  2 19:36:07 Pluton sshd9301: pam_unix(sshd:auth): check pass; user unknown

Site officiel : http://www.fail2ban.org

rkhunter

rkhunter est un détecteur de rootkit. Il garde une liste de hashs des exécutables installés sur le serveur et les compare périodiquement avec les hash actuels des fichiers. Bien configuré, il vous permettra d'être averti par mail si un fichier avait été modifié par une personne mal intentionné. Il vérifie également les permissions sur un certain nombre de fichiers ainsi que les utilisateurs/groupes ajoutés récemment.

M'enfin, si vous êtes averti par rkhunter et qu'il ne s'agit pas d'une fausse alerte, vous serez prévenu ... mais il sera peu être déjà trop tard ...

Site officiel : http://www.rootkit.nl

snort

Snort est un système de détection d'intrusion, il vous permettra de surveiller les attaques potentielles lancées sur votre serveur.

Vous en apprendrez d'avantage sur le site officiel : http://www.snort.org

Reporting

lire

Ce logiciel parse les logs apache, syslog etc .. et envoi des rapports par mail de l'activité de votre serveur.

Site officiel : http://www.logreport.org

apticron

Sur debian, cet outil vous enverra un mail lorsqu'une mise à jour d'un paquet est disponible. Il est donc indispensable de l'installer pour rester à jour.

Autres

backup-manager

Backup manager effectue des sauvegardes incrémentales de ce que vous désirez (généralement le dossier "/etc") et les upload par ftp ou ssh sur un serveur de backup.

iptstate et iptraf

iptstate permet de voir quelles sont les connexions actuellement ouvertes, iptraf permet de mesurer le débit des connexions actuelles sur le réseau. Si vous voulez voir ce qui se passe sur votre serveur ou bien si vous avez un doute quant à votre configuration d'iptables ... ces outils pourront se révéler bien utile.

Voila pour le moment, je mettrais la liste à jour si je découvre d'autres outils qui me paraissent intéressant.

mardi, septembre 1 2009

Bienvenue sur le blog IKI

Heu .. mais c'est quoi le "IKI Project" ? ....

Tout d'abord, laissez moi me présenter brièvement. Je m'appelle Rémy Pinsonneau, au travail et à mes heures perdues je suis développeur (principalement du J2E). Il y a maintenant un an de cela, j'ai décidé de me lancer dans un projet Open Source. Le fameux "IKI Project" ! A la base il était question de réaliser une interface web d'administration pour un serveur dédié. En réalité, pour le moment, il s'agit plus d'une sorte de "show case" qui me permet de tester les frameworks Java et autres technologies en tout genre.

J'ai décidé de créer ce blog pour partager mes connaissances en programmation Java et mon expérience de l'administration d'un serveur linux.

Dans les prochains billets, j'aborderai donc ces thèmes, en essayant de fournir des "how-to", "best practices", "tips" et autre petites choses bien utiles pour les vrais geeks[1]. Bien évidement, je ne prétends pas être un expert dans les sujets que je vais aborder, il est uniquement question de vous faire un retour d'expérience.

Si vous êtes assez curieux, le code source d'iki est disponible sur le site de gestion du projet : https://dev.iki-porject.org.

/**
 *  Dire bonjour
 * 
 * @param userName
 */
public void hello(String userName) {
	StringBuilder message = new StringBuilder(60);
	message.append("Bienvenue ");
	message.append(userName != null ? userName : "John Doe");
	message.append(" sur le blog de Rémy Pinsonneau");
	System.out.println(message.toString());
}

Notes

[1] je ne souhaite pas aborder dans ce billet la définition du "vrai geek" mais libre à vous de laisser des commentaires.