Search in sources :

Example 1 with TemplateLocation

use of org.springframework.boot.autoconfigure.template.TemplateLocation in project cas by apereo.

the class RegisteredServiceThemeBasedViewResolver method loadView.

@Override
protected View loadView(final String viewName, final Locale locale) throws Exception {
    final View view = super.loadView(viewName, locale);
    final RequestContext requestContext = RequestContextHolder.getRequestContext();
    final WebApplicationService service;
    final HttpServletResponse response;
    final List<ArgumentExtractor> argumentExtractorList = Collections.singletonList(this.argumentExtractor);
    if (requestContext != null) {
        response = WebUtils.getHttpServletResponse(requestContext);
        service = WebUtils.getService(argumentExtractorList, requestContext);
    } else {
        final HttpServletRequest request = WebUtils.getHttpServletRequestFromRequestAttributes();
        service = WebUtils.getService(argumentExtractorList, request);
        response = WebUtils.getHttpServletResponseFromRequestAttributes();
    }
    if (service == null) {
        return view;
    }
    final RegisteredService registeredService = this.servicesManager.findServiceBy(service);
    if (registeredService != null) {
        try {
            RegisteredServiceAccessStrategyUtils.ensureServiceAccessIsAllowed(service, registeredService);
        } catch (final Exception e) {
            response.setStatus(HttpStatus.UNAUTHORIZED.value());
        }
    }
    if (registeredService != null && StringUtils.hasText(registeredService.getTheme()) && view instanceof AbstractThymeleafView) {
        LOGGER.debug("Attempting to locate views for service [{}] with theme [{}]", registeredService.getServiceId(), registeredService.getTheme());
        final AbstractThymeleafView thymeleafView = (AbstractThymeleafView) view;
        final String viewUrl = registeredService.getTheme() + '/' + thymeleafView.getTemplateName();
        final String viewLocationUrl = prefix.concat(viewUrl).concat(suffix);
        LOGGER.debug("Attempting to locate view at [{}]", viewLocationUrl);
        final TemplateLocation location = new TemplateLocation(viewLocationUrl);
        if (location.exists(getApplicationContext())) {
            LOGGER.debug("Found view [{}]", viewUrl);
            thymeleafView.setTemplateName(viewUrl);
        } else {
            LOGGER.debug("View [{}] does not exist. Falling back to default view at [{}]", viewLocationUrl, thymeleafView.getTemplateName());
        }
    }
    return view;
}
Also used : ArgumentExtractor(org.apereo.cas.web.support.ArgumentExtractor) HttpServletRequest(javax.servlet.http.HttpServletRequest) WebApplicationService(org.apereo.cas.authentication.principal.WebApplicationService) RegisteredService(org.apereo.cas.services.RegisteredService) TemplateLocation(org.springframework.boot.autoconfigure.template.TemplateLocation) AbstractThymeleafView(org.thymeleaf.spring4.view.AbstractThymeleafView) HttpServletResponse(javax.servlet.http.HttpServletResponse) RequestContext(org.springframework.webflow.execution.RequestContext) AbstractThymeleafView(org.thymeleaf.spring4.view.AbstractThymeleafView) View(org.springframework.web.servlet.View)

Example 2 with TemplateLocation

use of org.springframework.boot.autoconfigure.template.TemplateLocation in project cas by apereo.

the class ThemeViewResolver method configureTemplateThemeDefaultLocation.

private void configureTemplateThemeDefaultLocation(final AbstractThymeleafView thymeleafView) {
    final String baseTemplateName = thymeleafView.getTemplateName();
    final String templateName = theme + "/" + baseTemplateName;
    final String path = thymeleafProperties.getPrefix().concat(templateName).concat(thymeleafProperties.getSuffix());
    final TemplateLocation location = new TemplateLocation(path);
    if (location.exists(getApplicationContext())) {
        thymeleafView.setTemplateName(templateName);
    }
}
Also used : TemplateLocation(org.springframework.boot.autoconfigure.template.TemplateLocation)

Example 3 with TemplateLocation

use of org.springframework.boot.autoconfigure.template.TemplateLocation in project spring-boot by spring-projects.

the class FreeMarkerAutoConfiguration method checkTemplateLocationExists.

@PostConstruct
public void checkTemplateLocationExists() {
    if (this.properties.isCheckTemplateLocation()) {
        TemplateLocation templatePathLocation = null;
        List<TemplateLocation> locations = new ArrayList<>();
        for (String templateLoaderPath : this.properties.getTemplateLoaderPath()) {
            TemplateLocation location = new TemplateLocation(templateLoaderPath);
            locations.add(location);
            if (location.exists(this.applicationContext)) {
                templatePathLocation = location;
                break;
            }
        }
        if (templatePathLocation == null) {
            logger.warn("Cannot find template location(s): " + locations + " (please add some templates, " + "check your FreeMarker configuration, or set " + "spring.freemarker.checkTemplateLocation=false)");
        }
    }
}
Also used : TemplateLocation(org.springframework.boot.autoconfigure.template.TemplateLocation) ArrayList(java.util.ArrayList) PostConstruct(javax.annotation.PostConstruct)

Aggregations

TemplateLocation (org.springframework.boot.autoconfigure.template.TemplateLocation)3 ArrayList (java.util.ArrayList)1 PostConstruct (javax.annotation.PostConstruct)1 HttpServletRequest (javax.servlet.http.HttpServletRequest)1 HttpServletResponse (javax.servlet.http.HttpServletResponse)1 WebApplicationService (org.apereo.cas.authentication.principal.WebApplicationService)1 RegisteredService (org.apereo.cas.services.RegisteredService)1 ArgumentExtractor (org.apereo.cas.web.support.ArgumentExtractor)1 View (org.springframework.web.servlet.View)1 RequestContext (org.springframework.webflow.execution.RequestContext)1 AbstractThymeleafView (org.thymeleaf.spring4.view.AbstractThymeleafView)1