01: /*
02: * Copyright Aduna (http://www.aduna-software.com/) (c) 1997-2006.
03: *
04: * Licensed under the Aduna BSD-style license.
05: */
06: package org.openrdf.http.webclient.server;
07:
08: import javax.servlet.http.HttpServletRequest;
09: import javax.servlet.http.HttpServletResponse;
10: import javax.servlet.http.HttpSession;
11:
12: import org.slf4j.Logger;
13: import org.slf4j.LoggerFactory;
14: import org.springframework.web.servlet.HandlerInterceptor;
15: import org.springframework.web.servlet.ModelAndView;
16:
17: import org.openrdf.http.webclient.SessionKeys;
18:
19: public class ServerSelectionInterceptor implements HandlerInterceptor {
20:
21: final Logger logger = LoggerFactory.getLogger(this .getClass());
22:
23: private String defaultServerContextName;
24:
25: private String serverSelectionView;
26:
27: public void setServerSelectionView(String serverSelectionView) {
28: this .serverSelectionView = serverSelectionView;
29: }
30:
31: /**
32: * @return Returns the defaultWebapp.
33: */
34: public String getDefaultServerContextName() {
35: return defaultServerContextName;
36: }
37:
38: /**
39: * @param defaultWebapp The defaultWebapp to set.
40: */
41: public void setDefaultServerContextName(String defaultWebapp) {
42: this .defaultServerContextName = defaultWebapp;
43: }
44:
45: public void afterCompletion(HttpServletRequest request,
46: HttpServletResponse response, Object handler, Exception e)
47: throws Exception {
48: // do nothing
49: }
50:
51: public void postHandle(HttpServletRequest request,
52: HttpServletResponse response, Object handler,
53: ModelAndView mav) throws Exception {
54: // do nothing
55: }
56:
57: public boolean preHandle(HttpServletRequest request,
58: HttpServletResponse response, Object handler)
59: throws Exception {
60: boolean result = true;
61:
62: HttpSession session = request.getSession(true);
63: Server server = (Server) session
64: .getAttribute(SessionKeys.SERVER_KEY);
65:
66: if (server == null) {
67: logger
68: .debug("No server found, attempting to set from cookie...");
69: ServerSelection serverSelection = new ServerSelection();
70: serverSelection
71: .setDefaultServerContextName(getDefaultServerContextName());
72:
73: serverSelection.setDefaultServerURL(request);
74: serverSelection.setFromCookies(request);
75:
76: if (serverSelection.isRemember()) {
77: if (serverSelection.getLocation() != null) {
78: logger.debug("Setting server from cookie: {}",
79: serverSelection.getLocation());
80: server = new Server(serverSelection.getLocation());
81: session
82: .setAttribute(SessionKeys.SERVER_KEY,
83: server);
84: }
85: }
86: }
87:
88: if (server == null) {
89: logger
90: .info("No server found, redirecting to selection form...");
91: result = false;
92: response.sendRedirect(request.getContextPath()
93: + serverSelectionView);
94: }
95:
96: return result;
97: }
98: }
|