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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
package org.litesoft.GWT.eventbus.server.nonpublic;
import javax.servlet.http.*;
import org.litesoft.GWT.eventbus.server.*;
import org.litesoft.logger.*;
public class ServerEventBusSessionMapper
{
private static final Logger LOGGER = LoggerFactory.getLogger( ServerEventBusSessionMapper.class );
private static void addServletBrowserData( HttpServletRequest pRequest, ServerEventBus pServerEventBus )
{
if ( pServerEventBus instanceof NonTemporaryServerEventBus )
{
pServerEventBus.setClientWindowInstanceData( ServerEventBus.TRANSLATED_PATH,
pRequest.getPathTranslated() );
pServerEventBus.setClientWindowInstanceData( ServerEventBus.REMOTE_ADDR,
pRequest.getRemoteAddr() );
}
}
public static ServerEventBus getServerEventBus( HttpServletRequest pRequest,
ThreadLocalContextFactory pThreadLocalContextFactory,
int pClientIdNumber )
throws InvalidSessionException
{
ServerEventBus zServerEventBus = ServerEventBusManager.INSTANCE.getServerEventBus( pClientIdNumber );
if ( null != zServerEventBus )
{
if ( !verifyRelatedBusCommonObject( pRequest, pThreadLocalContextFactory, zServerEventBus ) )
{
String zProblem = "Cross Session Request for ClientID '" + pClientIdNumber + "' from '" +
pRequest.getRemoteUser() + "' at: " + pRequest.getRemoteAddr();
LOGGER.warn.log( zProblem );
throw new InvalidSessionException( zProblem );
}
// getRelatedBusCommonObject() == null passes
}
return zServerEventBus;
}
private static synchronized boolean verifyRelatedBusCommonObject( HttpServletRequest pRequest,
ThreadLocalContextFactory pThreadLocalContextFactory,
ServerEventBus pServerEventBus )
{
Object zRelatedBusCommonObject = pServerEventBus.getRelatedBusCommonObject();
return (zRelatedBusCommonObject == null) ||
(zRelatedBusCommonObject == getSessionTracker( pRequest, pThreadLocalContextFactory ));
}
private static final String SERVER_EVENT_BUSES = "ServerEventBuses";
public static synchronized Integer[] getSessionServerEventBusClientIdNumbers( HttpServletRequest pRequest,
ThreadLocalContextFactory pThreadLocalContextFactory )
{
return getSessionTracker( pRequest, pThreadLocalContextFactory ).getClientIdNumbers();
}
private static synchronized SEBSessionTracker getSessionTracker( HttpServletRequest pRequest,
ThreadLocalContextFactory pThreadLocalContextFactory )
{
HttpSession session = pRequest.getSession();
SEBSessionTracker tracker = (SEBSessionTracker) session.getAttribute( SERVER_EVENT_BUSES );
if ( tracker == null )
{
session.setAttribute( SERVER_EVENT_BUSES,
tracker = new SEBSessionTracker( pThreadLocalContextFactory ) );
}
return tracker;
}
public static void addServerEventBus( ServerEventBus pParent, ServerEventBus pServerEventBus )
{
// Force use of same stuff
SEBSessionTracker tracker = (SEBSessionTracker) pParent.getRelatedBusCommonObject();
pServerEventBus.setRelatedBusCommonObject( tracker );
tracker.addServerEventBus( pServerEventBus );
}
public static void addServerEventBus( HttpServletRequest pRequest,
ThreadLocalContextFactory pThreadLocalContextFactory,
ServerEventBus pServerEventBus )
{
SEBSessionTracker tracker = getSessionTracker( pRequest, pThreadLocalContextFactory );
addServletBrowserData( pRequest, pServerEventBus );
pServerEventBus.setRelatedBusCommonObject( tracker );
tracker.addServerEventBus( pServerEventBus );
}
public static SEBSessionTracker addTrackerToServerEventBus( HttpServletRequest pRequest,
ThreadLocalContextFactory pThreadLocalContextFactory,
ServerEventBus pServerEventBus )
{
SEBSessionTracker tracker = getSessionTracker( pRequest, pThreadLocalContextFactory );
addServletBrowserData( pRequest, pServerEventBus );
pServerEventBus.setRelatedBusCommonObject( tracker );
return tracker;
}
public static String getLogoutMessage( HttpServletRequest pRequest,
ThreadLocalContextFactory pThreadLocalContextFactory )
{
return getSessionTracker( pRequest, pThreadLocalContextFactory ).getLogoutMessage();
}
public static void setLogoutMessage( HttpServletRequest pRequest,
ThreadLocalContextFactory pThreadLocalContextFactory,
String pLogoutMessage )
{
getSessionTracker( pRequest, pThreadLocalContextFactory ).setLogoutMessage( pLogoutMessage );
}
public static boolean anyServerEventBusesFor( HttpServletRequest pRequest,
ThreadLocalContextFactory pThreadLocalContextFactory )
{
return getSessionTracker( pRequest, pThreadLocalContextFactory ).anyServerEventBuses();
}
public static void dropAllServerEventBusesFor( HttpServletRequest pRequest,
ThreadLocalContextFactory pThreadLocalContextFactory,
String pWhy )
{
getSessionTracker( pRequest, pThreadLocalContextFactory ).dropAllServerEventBuses( pWhy );
}
}
|