Ik wou de de huidige gebruiker in een ThreadLocal variabele opslaan om zo in andere plaatsten van men applicatie aan de huidige gebruiker te kunnen (dit zonder telkens een object te moeten doorgeven)
ik doe dit nu in de men Filter klasse, maar blijkbaar gaat hier iets verloren, als een paar keer de filter opgeroepen wordt dan is men object plots uit men thread verdwenen, ik weet niet echt wat er verkeerd loopt.
enkel stukjes code:
dit gebruik ik om men user op te halen en te bewaren.
Hieronder een stukje van men filter. In men filter kijk ik of er al een userObject in men sessie zit, indien dit niet zo is, dan steek ik er eentje in (nu om het eenvoudig te houden enkel de userName en domein). Op dit moment plaats ik ook men user object ook in een threadLocal variabele. Via de output kan ik zien wat er zich in de sessie en thread variabele zit.
als ik eerst men applicatie opstart krijg ik dit:
dit klopt dus, 1ste maal geen user in de sessie noch in de threadvariable, maar na enkele keren klikken (soms slechts 1 maal) binnen men applicatie krijg ik snel het volgende als output:
de variabele in men thread is dus weg
enige verklaring hiervoor ?
ik doe dit nu in de men Filter klasse, maar blijkbaar gaat hier iets verloren, als een paar keer de filter opgeroepen wordt dan is men object plots uit men thread verdwenen, ik weet niet echt wat er verkeerd loopt.
enkel stukjes code:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| public class UserThreadManager { private static ThreadLocal threadLocal = new ThreadLocal(); private UserThreadManager() { } public static void setUser(User user) { threadLocal.set(user); } public static User getUser() { return (User) threadLocal.get(); } } |
dit gebruik ik om men user op te halen en te bewaren.
Hieronder een stukje van men filter. In men filter kijk ik of er al een userObject in men sessie zit, indien dit niet zo is, dan steek ik er eentje in (nu om het eenvoudig te houden enkel de userName en domein). Op dit moment plaats ik ook men user object ook in een threadLocal variabele. Via de output kan ik zien wat er zich in de sessie en thread variabele zit.
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
27
28
| public void doFilter( ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { ... User user = StrutsUtils.getUser(req.getSession()); System.err.println("voor if ---" + user + "---"); System.err.println("voor if ---" + UserThreadManager.getUser() + "---"); if (user == null) { NtlmPasswordAuthentication ntlm = (NtlmPasswordAuthentication) req.getSession().getAttribute("NtlmHttpAuth"); user = new User(); user.setUserName(ntlm.getUsername()); user.setDomain(ntlm.getDomain()); UserThreadManager.setUser(user); StrutsUtils.setUser(req.getSession(), user); } System.err.println("na if ***" + user + "***"); System.err.println("na if ***" + UserThreadManager.getUser() + "***"); chain.doFilter(req, resp); } |
als ik eerst men applicatie opstart krijg ik dit:
code:
1
2
3
4
| [18/05/05 17:07:46:559 CEST] 799ae14e SystemErr R voor if ---null--- [18/05/05 17:07:46:559 CEST] 799ae14e SystemErr R voor if ***null**** [18/05/05 17:07:46:715 CEST] 799ae14e SystemErr R na if ---be.oz.common.vo.User@3521e169--- [18/05/05 17:07:46:715 CEST] 799ae14e SystemErr R na if ***be.oz.common.vo.User@3521e169*** |
dit klopt dus, 1ste maal geen user in de sessie noch in de threadvariable, maar na enkele keren klikken (soms slechts 1 maal) binnen men applicatie krijg ik snel het volgende als output:
code:
1
2
3
4
| [18/05/05 17:09:08:260 CEST] 126ae149 SystemErr R voor if ---be.oz.common.vo.User@3521e169--- [18/05/05 17:09:08:260 CEST] 126ae149 SystemErr R voor if ***null**** [18/05/05 17:09:08:260 CEST] 126ae149 SystemErr R na if ---be.oz.common.vo.User@3521e169--- [18/05/05 17:09:08:260 CEST] 126ae149 SystemErr R na if ***null*** |
de variabele in men thread is dus weg
enige verklaring hiervoor ?
"Live as if you were to die tomorrow. Learn as if you were to live forever"