protected String determineUrl()

in plugin-core/plugin/src/main/groovy/grails/plugin/springsecurity/web/access/intercept/AnnotationFilterInvocationDefinition.groovy [86:149]


	protected String determineUrl(FilterInvocation filterInvocation) {
		HttpServletRequest request = filterInvocation.httpRequest
		HttpServletResponse response = filterInvocation.httpResponse

		String requestUrl = urlPathHelper.getRequestUri(request)
		requestUrl = stripContextPath(requestUrl, request)

		GrailsWebRequest existingRequest
		try {
			existingRequest = WebUtils.retrieveGrailsWebRequest()
		}
		catch (IllegalStateException e) {
			if (request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE) == 404) {
				ERROR404
			}
			else {
				requestUrl
			}
		}

		log.trace 'Requested url: {}', requestUrl

		String url
		try {
			GrailsWebRequest grailsRequest = new GrailsWebRequest(request, response, servletContext)
			WebUtils.storeGrailsWebRequest grailsRequest

			Map<String, Object> savedParams = copyParams(grailsRequest)

			UrlMappingInfo[] urlInfos = PluginReflectionUtils.matchAllUrlMappings(
					urlMappingsHolder, requestUrl, grailsRequest, httpServletResponseExtension)

			for (UrlMappingInfo mapping : urlInfos) {
				if (mapping.redirectInfo) {
					log.trace 'Mapping {} is a redirect', mapping
					break
				}

				configureMapping mapping, grailsRequest, savedParams

				url = findGrailsUrl(mapping)
				if (url) {
					break
				}
			}
		}
		finally {
			if (existingRequest) {
				WebUtils.storeGrailsWebRequest(existingRequest)
			}
			else {
				WebUtils.clearGrailsWebRequest()
			}
		}

		if (!StringUtils.hasLength(url)) {
			// probably css/js/image
			url = requestUrl
		}

		String finalUrl = lowercaseAndStripQuerystring(url)
		log.trace 'Final url is {}', finalUrl
		finalUrl
	}