Voor mijn huidige project moeten we zorgen dat na het inloggen altijd een speciale pagina getoond wordt, waarmee wat gegevens in de sessie gezet kunnen worden. Die worden namelijk door de rest van de applicatie gebruikt.
Om dit op te lossen hebben we een Filter gemaakt welke op een dummy sessievariabele controleert en afhankelijk van of de variabele bestaat, wordt er al dan niet doorgestuurd naar die speciale homepage.
Nu is naar mijn idee één van de kernpunten van het servletframework dat het multi threaded is en dat wil ik in zo'n klein stom filtertje niet om zeep helpen. Vandaar dat de chain.doFilter() call niet in een synchronized context staat.
Ik sync op de session, want de state is steeds gekoppeld aan een specifieke thread. Meerdere threads hebben namelijk een andere session. Over meerdere requests wordt hetzelfde session object gebruikt, dat heb ik al vrij provisorisch gecontroleerd.
Tot zover mijn redeneringen en argumenten. Ik ben benieuwd naar jullie opbouwende (hoeft niet
) feedback.
Om dit op te lossen hebben we een Filter gemaakt welke op een dummy sessievariabele controleert en afhankelijk van of de variabele bestaat, wordt er al dan niet doorgestuurd naar die speciale homepage.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| /** {@inheritDoc} */ public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; HttpSession ses = req.getSession(); if (excludeThisView(req, res)) { chain.doFilter(req, res); } else { /* * Synchronizeren op het sessie object. De sessie wijst bij * verschillende requests naar exact hetzelfde object. */ synchronized (ses) { if (ses.getAttribute(DUMMY_SESSION_STRING) == null) { ses.setAttribute(DUMMY_SESSION_STRING, new Object()); String ctxRoot = req.getContextPath(); res.sendRedirect(ctxRoot + HOMEPAGE); return; } } chain.doFilter(req, res); } } |
Nu is naar mijn idee één van de kernpunten van het servletframework dat het multi threaded is en dat wil ik in zo'n klein stom filtertje niet om zeep helpen. Vandaar dat de chain.doFilter() call niet in een synchronized context staat.
Ik sync op de session, want de state is steeds gekoppeld aan een specifieke thread. Meerdere threads hebben namelijk een andere session. Over meerdere requests wordt hetzelfde session object gebruikt, dat heb ik al vrij provisorisch gecontroleerd.
Tot zover mijn redeneringen en argumenten. Ik ben benieuwd naar jullie opbouwende (hoeft niet
Fat Pizza's pizza, they are big and they are cheezy