/** * Register the specified handler for the given URL path. * * @param urlPath * the URL the bean should be mapped to * @param handler * the handler instance or handler bean name String (a bean name will automatically * be resolved into the corresponding handler bean) * * @throws BeansException * if the handler couldn't be registered * @throws IllegalStateException * if there is a conflicting handler registered */ protected void registerDefaultHandler(String urlPath, Controller handler) throws BeansException, IllegalStateException { Assert.notNull(urlPath, "URL path must not be null"); Assert.notNull(handler, "Handler object must not be null"); Object resolvedHandler = handler; Object mappedHandler = this.mergedUrlMap.get(urlPath); if (mappedHandler != null) { if (mappedHandler != resolvedHandler) { throw new IllegalStateException( "Cannot map handler [" + handler + "] to URL path [" + urlPath + "]: There is already handler [" + resolvedHandler + "] mapped."); } } else { if (urlPath.equals("/")) { setRootHandler(resolvedHandler); } else if (urlPath.equals("/*")) { setDefaultHandler(resolvedHandler); } } }
/** * reloades the merged url map */ public synchronized void reloadHandlerMap() { mergedUrlMap.clear(); for (Entry<Controller, List<String>> entry : dynamicUrlMaps.entrySet()) { for (String urlPattern : entry.getValue()) { mergedUrlMap.put(urlPattern, entry.getKey()); } } setRootHandler(null); setDefaultHandler(null); for (Entry<String, Controller> urlMapEntry : mergedUrlMap.entrySet()) { registerDefaultHandler(urlMapEntry.getKey(), urlMapEntry.getValue()); } }
/** * Unregisters the Service. * * @param controller * The controller. */ @Unbind(id = "controllerRegistry", optional = true, aggregate = true) public void unregister(Controller controller) { mapper.unregisterController(controller); // remove startpage mapping if necessary StartpageController startpageMarker = controller.getClass().getAnnotation( StartpageController.class); if (startpageMarker != null) { getStartpageRegistry().unregisterStartpageController(controller); } UrlMapping mapping = controller.getClass().getAnnotation(UrlMapping.class); if (mapping != null && mapping.value().startsWith("/*/admin/")) { Page page = controller.getClass().getAnnotation(Page.class); if (page != null && StringUtils.isNotBlank(page.submenu())) { WebServiceLocator.findService(AdministrationMenuManager.class) .removeFromExtensionSection(page.submenu()); } } }
@Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { String path = request.getServletPath(); String internalPath = path.replaceAll(xmlMarker, ""); Controller controller = (Controller) getApplicationContext().getBean(internalPath); if (controller != null) { ModelAndView modelAndView = controller.handleRequest(request, response); if (modelAndView.getModel() != null) { TransportableModel tm = new TransportableModel(); tm.putAll(modelAndView.getModel()); new XStream().toXML(tm, response.getWriter()); } } return null; }
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { String path = request.getServletPath(); String internalPath = path.replaceAll(xmlMarker, ""); Controller controller = (Controller) getApplicationContext().getBean(internalPath); if (controller != null) { ModelAndView modelAndView = controller.handleRequest(request, response); if (modelAndView.getModel() != null) { TransportableModel tm = new TransportableModel(); tm.putAll(modelAndView.getModel()); XStream x = new XStream(); x.toXML(tm, response.getWriter()); } } return null; }
@Test public void verifyOK() throws Exception { clearAllServices(); final MockHttpServletRequest mockRequest = new MockHttpServletRequest("GET", CONTEXT + OAuthConstants.AUTHORIZE_URL); mockRequest.setParameter(OAuthConstants.CLIENT_ID, CLIENT_ID); mockRequest.setParameter(OAuthConstants.REDIRECT_URI, REDIRECT_URI); mockRequest.setServerName(CAS_SERVER); mockRequest.setServerPort(CAS_PORT); mockRequest.setScheme(CAS_SCHEME); final MockHttpServletResponse mockResponse = new MockHttpServletResponse(); ((OAuth20WrapperController) oauth20WrapperController) .getServicesManager().save(getRegisteredService(REDIRECT_URI, SERVICE_NAME)); final Controller c = ((OAuth20WrapperController) oauth20WrapperController).getAuthorizeController(); ((OAuth20AuthorizeController) c).setLoginUrl(CAS_URL); final ModelAndView modelAndView = oauth20WrapperController.handleRequest(mockRequest, mockResponse); final HttpSession session = mockRequest.getSession(); assertEquals(REDIRECT_URI, session.getAttribute(OAuthConstants.OAUTH20_CALLBACKURL)); assertEquals(SERVICE_NAME, session.getAttribute(OAuthConstants.OAUTH20_SERVICE_NAME)); final View view = modelAndView.getView(); assertTrue(view instanceof RedirectView); final RedirectView redirectView = (RedirectView) view; final MockHttpServletRequest reqSvc = new MockHttpServletRequest("GET", CONTEXT + OAuthConstants.CALLBACK_AUTHORIZE_URL); reqSvc.setServerName(CAS_SERVER); reqSvc.setServerPort(CAS_PORT); reqSvc.setScheme(CAS_SCHEME); final URL url = new URL(OAuthUtils.addParameter(CAS_URL, "service", reqSvc.getRequestURL().toString())); final URL url2 = new URL(redirectView.getUrl()); assertEquals(url, url2); }
@Test public void verifyOKWithState() throws Exception { clearAllServices(); final MockHttpServletRequest mockRequest = new MockHttpServletRequest("GET", CONTEXT + OAuthConstants.AUTHORIZE_URL); mockRequest.setParameter(OAuthConstants.CLIENT_ID, CLIENT_ID); mockRequest.setParameter(OAuthConstants.REDIRECT_URI, REDIRECT_URI); mockRequest.setParameter(OAuthConstants.STATE, STATE); mockRequest.setServerName(CAS_SERVER); mockRequest.setServerPort(CAS_PORT); mockRequest.setScheme(CAS_SCHEME); final MockHttpServletResponse mockResponse = new MockHttpServletResponse(); ((OAuth20WrapperController) oauth20WrapperController) .getServicesManager().save(getRegisteredService(REDIRECT_URI, SERVICE_NAME)); final Controller c = ((OAuth20WrapperController) oauth20WrapperController).getAuthorizeController(); ((OAuth20AuthorizeController) c).setLoginUrl(CAS_URL); final ModelAndView modelAndView = oauth20WrapperController.handleRequest(mockRequest, mockResponse); final HttpSession session = mockRequest.getSession(); assertEquals(REDIRECT_URI, session.getAttribute(OAuthConstants.OAUTH20_CALLBACKURL)); assertEquals(SERVICE_NAME, session.getAttribute(OAuthConstants.OAUTH20_SERVICE_NAME)); assertEquals(STATE, session.getAttribute(OAuthConstants.OAUTH20_STATE)); final View view = modelAndView.getView(); assertTrue(view instanceof RedirectView); final RedirectView redirectView = (RedirectView) view; final MockHttpServletRequest reqSvc = new MockHttpServletRequest("GET", CONTEXT + OAuthConstants.CALLBACK_AUTHORIZE_URL); reqSvc.setServerName(CAS_SERVER); reqSvc.setServerPort(CAS_PORT); reqSvc.setScheme(CAS_SCHEME); final URL url = new URL(OAuthUtils.addParameter(CAS_URL, "service", reqSvc.getRequestURL().toString())); final URL url2 = new URL(redirectView.getUrl()); assertEquals(url, url2); }
@Bean protected Controller rootController() { return new ParameterizableViewController() { @Override protected ModelAndView handleRequestInternal(final HttpServletRequest request, final HttpServletResponse response) throws Exception { final String queryString = request.getQueryString(); final String url = request.getContextPath() + "/login" + (queryString != null ? '?' + queryString : StringUtils.EMPTY); return new ModelAndView(new RedirectView(response.encodeURL(url))); } }; }
@Bean public SimpleUrlHandlerMapping handlerMapping() { final SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping(); final Controller root = rootController(); mapping.setOrder(1); mapping.setAlwaysUseFullPath(true); mapping.setRootHandler(root); final Map urls = new HashMap(); urls.put("/", root); mapping.setUrlMap(urls); return mapping; }
@Bean protected Controller rootController() { return new ParameterizableViewController() { protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { String queryString = request.getQueryString(); String url = request.getContextPath() + "/login" + (queryString != null ? '?' + queryString : ""); return new ModelAndView(new RedirectView(response.encodeURL(url))); } }; }
@Bean public SimpleUrlHandlerMapping handlerMapping() { SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping(); Controller root = this.rootController(); mapping.setOrder(1); mapping.setAlwaysUseFullPath(true); mapping.setRootHandler(root); Map urls = new HashMap(); urls.put("/", root); mapping.setUrlMap(urls); return mapping; }
public static WebControllerManager getMockedWebControllerManager() { final WebControllerManager mockedWebControllerManager = Mockito.mock(WebControllerManager.class); Mockito.doNothing().when(mockedWebControllerManager).registerController(Mockito.anyString(), Mockito.any(Controller.class)); return mockedWebControllerManager; }
/** * Registers a start page providing controller. The start page of the controller will be set as * the current start page which can for instance be used as default redirection target or as * target page after successful authentication. * * @param controller * the controller to register * @param startpage * the start page to register as relative URL */ public void registerStartpageController(Controller controller, String startpage) { startpage = correctUrl(startpage); if (startpage != null) { synchronized (this) { this.startpage = startpage; this.startpageController = controller; LOG.info("Setting start page to " + startpage); } } }
/** * Unregister a controller that provided a start page. If the controller is the last controller * that was added with {@link #registerStartpageController(Controller, String)} the start page * is reset to the default start page. * * @param controller * the controller to unregister */ public void unregisterStartpageController(Controller controller) { synchronized (this) { if (controller != null && controller.equals(this.startpageController)) { this.startpage = this.defaultStartpage; this.startpageController = null; LOG.info("Setting start page back to default " + this.startpage); } } }
/** * * @param controller * the controller * @param urlPatterns * the url patterns of the controller */ public synchronized void registerController(Controller controller, List<String> urlPatterns) { setServletContext(controller); dynamicUrlMaps.put(controller, urlPatterns); reloadHandlerMap(); LOG.info("Added a controller (" + controller.getClass().getSimpleName() + ") for URLs: " + urlPatterns); }
/** * Registers the Service. * * @param controller * The controller. */ @Bind(id = "controllerRegistry", optional = true, aggregate = true) public void register(Controller controller) { List<String> urlPatterns = new ArrayList<String>(); UrlMapping mapping = controller.getClass().getAnnotation(UrlMapping.class); if (mapping != null) { urlPatterns.add(mapping.value()); addAdministrationView(mapping, controller); } UrlMappings mappings = controller.getClass().getAnnotation(UrlMappings.class); if (mappings != null) { for (String urlMapping : mappings.mappings()) { urlPatterns.add(urlMapping); } } mapper.registerController(controller, urlPatterns); StartpageController startpageMarker = controller.getClass().getAnnotation( StartpageController.class); if (startpageMarker != null) { if (urlPatterns.size() == 0) { LOGGER.warn("Startpage marker ignored because no URL mapping is defined"); } else { registerStartpageController(controller, urlPatterns.get(0)); } } else { LOGGER.debug("No startpage marker found"); } }
/** * Registers the start page of the controller as new start page. The start page must be of legal * format. * * @param controller * the controller providing the start page * @param urlPattern * the urlPattern from which the start page should be extracted */ private void registerStartpageController(Controller controller, String urlPattern) { String startpageUrl = null; if (urlPattern.startsWith("/*/")) { startpageUrl = urlPattern.substring(2); } if (startpageUrl == null || startpageUrl.contains("*")) { LOGGER.warn("Ignoring invalid start page URL " + urlPattern); } else { getStartpageRegistry().registerStartpageController(controller, startpageUrl); } }
@Override protected HandlerAdapter getHandlerAdapter(Object handler) throws ServletException { if (handler instanceof HttpRequestHandler) { return new HttpRequestHandlerAdapter(); } else if (handler instanceof Controller) { Object unwrappedHandler = ClassLoaderUtils.unwrapFromProxy(handler); if (unwrappedHandler instanceof CXFServletControllerAdapter) { // TODO this just seems weird as this controller is initially null when it's created, does there need to be some synchronization here? ((CXFServletControllerAdapter)unwrappedHandler).setController(cxfServletController); } return new SimpleControllerHandlerAdapter(); } throw new RiceRuntimeException("handler of type " + handler.getClass().getName() + " is not known and can't be used by " + KSBDispatcherServlet.class.getName()); }
@Bean public SwaggerSpringMvcPlugin customImplementation(){ SwaggerSpringMvcPlugin mvcPlugin = new SwaggerSpringMvcPlugin(this.springSwaggerConfig); mvcPlugin .apiInfo(apiInfo()) .ignoredParameterTypes(Authentication.class, Principal.class) .excludeAnnotations(new Class[]{Controller.class}) .authorizationTypes(authTypes()) .authorizationContext(authContext()) ; return mvcPlugin; }
public Controller getAuthorizeController() { return authorizeController; }
public Controller getCallbackAuthorizeController() { return callbackAuthorizeController; }
public Controller getAccessTokenController() { return accessTokenController; }
public Controller getProfileController() { return profileController; }
@Bean public Controller rootController() { return new CasManagementRootController(); }
public boolean isControllerType(Class<?> beanClass) { return Controller.class.isAssignableFrom(beanClass); }
public boolean isControllerType(Class beanClass) { return Controller.class.isAssignableFrom(beanClass); }
/** * Gets controller. * * @param id the id * @return the controller */ protected final Controller getController(final String id) { return applicationContext.getBean(id, Controller.class); }
/** * Unregister all handlers specified in the URL map for the corresponding plugin. * * @param controller * the controller */ public synchronized void unregisterController(Controller controller) { dynamicUrlMaps.remove(controller); reloadHandlerMap(); LOG.info("Removed a controller " + controller.getClass().getSimpleName()); }
/** * Check if the controller implements {@link ServletContextAware} and set the servlet context * * @param controller * the controller to set the servlet context */ private void setServletContext(Controller controller) { if (controller instanceof ServletContextAware) { ((ServletContextAware) controller).setServletContext(this.getServletContext()); } }