Vorrei eliminare il HttpSession completamente
Non si può del tutto disattivarlo. Tutto quello che devi fare è solo il non per ottenere una maniglia da request.getSession()
o request.getSession(true)
in qualsiasi punto del codice dell'applicazione web e assicurarti che i tuoi JSP non lo faccia implicitamente impostando <%@page session="false"%>
.
Se la vostra preoccupazione principale è in realtà disabilitare il cookie che è stato utilizzato dietro le quinte di HttpSession
, allora è possibile in Java EE 5/Servlet 2.5 farlo solo nella configurazione webapp specifica del server. Ad esempio, in Tomcat è possibile impostare l'attributo cookies
su false
nell'elemento <Context>
.
<Context cookies="false">
Vedere anche questo Tomcat specific documentation.In questo modo la sessione non verrà conservata nelle richieste successive che non vengono riscritte da URL - solo quando la si cattura dalla richiesta per qualche motivo. Dopo tutto, se non ne hai bisogno, lo solo non lo prendi, quindi non verrà creato/mantenuto affatto.
Oppure, se siete già su Java EE 6/Servlet 3.0 o più recente, e davvero vuole farlo tramite web.xml
, quindi è possibile utilizzare il nuovo <cookie-config>
elemento web.xml
come segue a zero-out l'età massima:
<session-config>
<session-timeout>1</session-timeout>
<cookie-config>
<max-age>0</max-age>
</cookie-config>
</session-config>
Se si vuole hardcode nel vostro webapplication modo che getSession()
mai restituisce un HttpSession
(o un "vuoto" HttpSession
), allora avrete bisogno di creare un filtro in ascolto su un url-pattern
di /*
che sostituisce la HttpServletRequest
con un'implementazione HttpServletRequestWrapper
che ritorna su tutto getSession()
metodi null
o un'implementazione fittizia HttpSession
fittizia che non fa nulla, o addirittura genera UnsupportedOperationException
.
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
chain.doFilter(new HttpServletRequestWrapper((HttpServletRequest) request) {
@Override
public HttpSession getSession() {
return null;
}
@Override
public HttpSession getSession(boolean create) {
return null;
}
}, response);
}
P.S. È una cattiva idea? Preferisco disabilitare completamente le cose finché non ne ho davvero bisogno.
Se non ne hai bisogno, non usarli. È tutto. Davvero :)
Che domanda interessante. Ho una situazione in cui con Tomcat non viene creata alcuna sessione per me, quindi stavo cercando se c'era un modo per trasformare la sessione _on_ in web.xml. : D – Trejkaz