sabato 19 luglio 2008

Back to Fluxbox

In questi giorni ho voluto smanettare un po' sul mio portatile vecchio. Ho dovuto cambiarlo ad inizio anno perchè praticamente non si chiude più. Una staffa dello schermo si è staccata dalla scocca e va a far forza sulla plastica facendo dei rumori strani e spostando fuori asse lo schermo.

Inoltre diventava sempre più lento. E' una cosa che non mi spiego, ma ha avuto un decadimento delle prestazioni davvero incredibile.
Tempo di accensione fino alla schermata gdm: accettabile. Da lì in poi un disastro..

E così ieri mi sono girate:

> apt-get remove --purge `dpkg --list | awk '{print $2}' | grep gnome`

seguito a più riprese da:

> apt-get autoremove
> apt-get remove --purge `deborphan`

poi ho installato fluxbox e xdm. Ed è stato un po' un ritorno alle origini, quando un sacco di anni fa ho iniziato a farmi le ossa con GNU/Linux su un Pentium II @450 con 96Mb di RAM, ovviamente con Fluxbox e xdm.

Per la cronaca, quel pc è ancora vivo e vegeto, con ben 192MB di ram e XFCE.. e ha, giustamente per diritti d'anzianità, l'IP 192.168.1.2 :)

venerdì 18 luglio 2008

Java: Filter Servlet

Il bello di usare i Filter in java è che deleghi una serie di controlli che sarebbero da replicare nelle varie action struts (o pagine JSP, o altre servlet) al filtro.

Questo può servire sia come controllo sulla sessione sia come controllo di sicurezza.

Molto spesso mi son trovato a contatto con applicazioni (e sicuramente è un errore che ho fatto anch'io, eh) che non effettuano il controllo sul corretto stato della sessione in alcune aree dell'applicazione web. Per cui c'è la possiblità che alcuni punti di entrata non previsti (passando per esempio dalla cronologia del browser o da un bookmark) non effettuino i dovuti controllo.

Per tagliare la testa al toro allora si può implementare un filtro del genere che funzioni con una whitelist interna (il metodo userNotNeeded(uri)) in cui ci sono tutti gli url (quindi le funzionalità, per intenderci) che possono essere richieste anche senza utente loggato in sessione.

Quello che non passa il controllo viene rediretto alla pagina di errore


public class UserBeanFilter implements Filter {
[..]
public void doFilter(ServletRequest req, ServletResponse response,
FilterChain chain) throws IOException, ServletException {

HttpServletRequest request = (HttpServletRequest) req;
UserBean user = (UserBean)request.getSession().getAttribute(USER_BEAN);

String uri = request.getRequestURI();

if ( (user != null) || userNotNeeded(uri)) {
logger.trace("Session ok for " + uri);
chain.doFilter(request, response);
} else {
RequestDispatcher rd = request.getRequestDispatcher(ERROR_PAGE);
logger.warn("Session required for " + uri);
rd.forward(request, response);
}
}
}


Niente di particolarmente sofisticato, ma può tornare utile..