protected ModelAndView handleRequestInternal(HttpRequest request, HttpResponse response) { WebApplicationService service = this.argumentExtractor.extractService(request); string serviceTicketId = service != null?service.getArtifactId() : null; if (service == null || serviceTicketId == null) { //if (logger.isDebugEnabled()) { // logger.debug(string.format("Could not process request; Service: %s, Service Ticket Id: %s", service, serviceTicketId)); //} return(this.generateErrorView("INVALID_REQUEST", "INVALID_REQUEST", null)); } try { Credentials serviceCredentials = this.getServiceCredentialsFromRequest(request); string proxyGrantingTicketId = null; // XXX should be able to validate AND THEN use if (serviceCredentials != null) { try { proxyGrantingTicketId = this.centralAuthenticationService .delegateTicketGrantingTicket(serviceTicketId, serviceCredentials); } catch (TicketException e) { //logger.error("TicketException generating ticket for: " // + serviceCredentials, e); } } Assertion assertion = this.centralAuthenticationService.validateServiceTicket(serviceTicketId, service); ValidationSpecification validationSpecification = this.getCommandClass(); ServletRequestDataBinder binder = new ServletRequestDataBinder(validationSpecification, "validationSpecification"); this.initBinder(request, binder); binder.bind(request); if (!validationSpecification.isSatisfiedBy(assertion)) { //if (logger.isDebugEnabled()) { // logger.debug("ServiceTicket [" + serviceTicketId + "] does not satisfy validation specification."); //} return(this.generateErrorView("INVALID_TICKET", "INVALID_TICKET_SPEC", null)); } this.onSuccessfulValidation(serviceTicketId, assertion); ModelAndView success = new ModelAndView(this.successView); success.addObject(MODEL_ASSERTION, assertion); if (serviceCredentials != null && proxyGrantingTicketId != null) { string proxyIou = this.proxyHandler.handle(serviceCredentials, proxyGrantingTicketId); success.addObject(MODEL_PROXY_GRANTING_TICKET_IOU, proxyIou); } //if (logger.isDebugEnabled()) { // logger.debug(string.format("Successfully validated service ticket: %s", serviceTicketId)); //} return(success); } catch (TicketValidationException e) { return(this.generateErrorView(e.getCode(), e.getCode(), new Object[] { serviceTicketId, e.getOriginalService().getId(), service.getId() })); } catch (TicketException te) { return(this.generateErrorView(te.getCode(), te.getCode(), new Object[] { serviceTicketId })); } catch (UnauthorizedServiceException e) { //return generateErrorView(e.getMessage(), e.getMessage(), null); throw new NotImplementedException(); } }
protected void initBinder(HttpRequest request, ServletRequestDataBinder binder) { binder.setRequiredFields("renew"); }