01: package com.xoetrope.service.servlet;
02:
03: import javax.servlet.http.HttpServletRequest;
04: import javax.servlet.http.HttpSession;
05: import net.xoetrope.optional.service.ServiceContext;
06: import net.xoetrope.optional.service.ServiceProxyArgs;
07: import net.xoetrope.optional.service.ServiceProxyException;
08: import net.xoetrope.optional.service.XRouteManager;
09:
10: /**
11: * Description ServiceProxy Object for handling session management on the server only.
12: * To be used with servlet engines.
13: *
14: * <p> Copyright (c) Xoetrope Ltd., 2001-2006, This software is licensed under
15: * the GNU Public License (GPL), please see license.txt for more details. If
16: * you make commercial use of this software you must purchase a commercial
17: * license from Xoetrope.</p>
18: * <p> $Revision: 1.2 $</p>
19: */
20: public class ServerSessionManager extends SessionManager {
21: /**
22: * Creates a new instance of ServerSessionManager
23: */
24: public ServerSessionManager() {
25: }
26:
27: /**
28: * The overloaded call for the ServiceProxy
29: * Syntax for servler SessionID...
30: * ;jsessionid=789ec62424e5865edf3ceec4f0976bdf
31: * @param method The name of the service
32: * @param context The ServiceContext containing arguments
33: * @throws net.xoetrope.optional.service.ServiceProxyException Throw ServiceProxyException if the call fails
34: * @return The result of the call
35: */
36: public Object call(String method, ServiceContext context)
37: throws ServiceProxyException {
38: Object res = null;
39: ServiceProxyArgs args = context.getArgs();
40:
41: boolean server = (side == XRouteManager.SERVER_SIDE);
42: if (server) {
43: /**
44: * Pass the current session key to the server, call the next proxy. If
45: * there was an error on the server show the error message otherwise store
46: * the session key for future calls.
47: */
48: boolean error = false;
49: HttpServletRequest request = (HttpServletRequest) args
50: .getPassParam("session");
51: String sessionKey = (String) args
52: .getPassParam(ARG_NAME_PASS_SESSION);
53: if ((sessionKey == null) || (sessionKey.length() == 0)) {
54: HttpSession session = request.getSession(true);
55: args.setReturnParam(ARG_NAME_RETURN_SESSION, session
56: .getId());
57: String checkParamName = (String) args
58: .getPassParam(ARG_NAME_CHECKPARAM);
59: session.setAttribute(ARG_NAME_CHECKPARAM, args
60: .getPassParam(checkParamName));
61: args.setPassParam(ARG_NAME_SESSION_STATE, NEW_SESSION);
62: } else {
63: HttpSession session = request.getSession(false);
64: if (session == null) {
65: error = true;
66: args.addError(ERR_SESSION_EXPIRED);
67: } else {
68: String checkValue = (String) session
69: .getAttribute(ARG_NAME_CHECKPARAM);
70: String checkParamName = (String) args
71: .getPassParam(ARG_NAME_CHECKPARAM);
72: String checkParam = (String) args
73: .getPassParam(checkParamName);
74: if ((session.getId().compareTo(sessionKey) != 0)
75: && checkValue.compareTo(checkParam) == 0) {
76: args.addError(INVALID_SESSION);
77: error = true;
78: args.setReturnParam(ARG_NAME_RETURN_SESSION,
79: null);
80: args.setPassParam(ARG_NAME_SESSION_STATE,
81: INVALID_SESSION);
82: } else {
83: args.setReturnParam(ARG_NAME_RETURN_SESSION,
84: session.getId());
85: args.setPassParam(ARG_NAME_SESSION_STATE,
86: VALID_SESSION);
87: }
88: }
89: }
90: if (!error)
91: res = callNextProxy(method, context, null);
92: }
93: return res;
94: }
95: }
|