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..
Nessun commento:
Posta un commento