-
Notifications
You must be signed in to change notification settings - Fork 3.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Spring MVC/Servlet implementation #36
Comments
I'm just curious. Will this issue be targeted for a 2.x release? |
@joshiste it will not be |
Useful for those who can't (or won't) use webflux. |
This comment has been minimized.
This comment has been minimized.
Is there any progress? |
No |
Is there a plan to allow Spring MVC? |
@spencergibb we have been using spring cloud zuul with @EnableZuulProxy mode in an spring boot app which has some rest endpoints exposed with restcontoller. What is the suggestion to use spring cloud gateway in this situation |
@mohanrao only if you migrate to a webflux application. If you aren't doing anything serlvet specific and are using spring annotations, it shouldn't be too difficult. |
Thanks @spencergibb . I will try migrating to a web flux . Our application uses oracle so it's not a true migration for some/most of the rest endpoints |
* Added classes for async load balancer interceptor Fixes spring-cloud#36
+1 for this. My use case is actually quite simple -- I work for a large corporation and want to use spring cloud with a gateway service, but the security libraries to interact with corporate SSO are written in such a way that is extremely dependent on the Servlet Context (hard-coded HttpServletRequest objects throughout the entire stack). For better or worse, I'd be surprised if there's ever a reactive implementation of that library, so it simply doesn't work with spring cloud gateway. Assuming as of now, still no progress? |
Until it gets assigned a project or milestone, you can assume no progress. |
@spencergibb is there any mechanism available to vote to get this needs to assigned to a project or milestone |
The reaction in #36 (comment) is the only voting we have. Note, this is a major effort and basically a parallel implementation. |
Here's a super simple (read nowhere near close) webmvc.fn version https://github.com/spencergibb/spring-cloud-gateway/blob/92208270307f275693e0c5223e85c5572f1a6100/spring-cloud-gateway-fn/src/test/java/org/springframework/cloud/gateway/fn/webmvc/WebmvcIntegrationTests.java#L84 |
Includes: - FilterFunctions - HandlerFunctions - TestRestClient Fixes gh-36
+1 as Project Loom getting finalized. It's good to have Spring MVC based Gateway. |
Will this support equivalent of the /zuul/ prefix support (bypass dispatcher servlet) of NetFlix Zuul for uploading large files . Or does that not apply to the new architecture? If the use case is still valid, what is the equivalent way to handle it in new Spring MVC implementation of SCG. |
This will not bypass the dispatcher servlet. I do not know if that use case is valid outside of zuul |
I meant the original implementation in Netflix Zuul provided the |
Includes: - FilterFunctions - HandlerFunctions - TestRestClient Fixes gh-36
Includes: - FilterFunctions - HandlerFunctions - TestRestClient Fixes gh-36
Includes: - FilterFunctions - HandlerFunctions - TestRestClient Fixes gh-36
Includes: - FilterFunctions - HandlerFunctions - TestRestClient Fixes gh-36
Includes: - FilterFunctions - HandlerFunctions - TestRestClient Fixes gh-36
Includes: - FilterFunctions - HandlerFunctions - TestRestClient Fixes gh-36
* Initial support for Gateway Server MVC Includes: - FilterFunctions - HandlerFunctions - TestRestClient Fixes gh-36 * Adds ProxyExchange abstraction and RestTemplate impl. Also formatting and polish * Migrates from RestTemplateProxyExchange to ClientHttpRequestFactoryProxyExchange Also implements GatewayServerResponse that is mutable. * Removes RestTemplateProxyExchange.javaˆ * Allows resolving uri by request attribute * formattingˆ * Moved beans to GatewayServerMvcAutoConfiguration * Removes unneeded GatewayServerRequestBuilder.javaˆ * Adds addRequestParameter filter * Adds FilterFunctions.setPath() * Moves FilterFunctions.addResponseHeader() * Adds FilterFunctions.stripPrefix() * Moves ProxyExchangeHandlerFunction to bean. This allows easier autoconfiguration. * Adds HttpHeadersFilter and RemoveHopByHopR*HeadersFilter * removes unused imports * Initial local configuration compatibility with webflux server. Borrows Operation framework from Spring Boot Actuator. Discoverable predicates and filters are found via spring.factories. Currently only static methods are supported. Shortcut configuration is not yet supported. * Organized classes into individual packages * Copy request body to proxy exchange client request body * Changes getApplicationContext() to user RequestContextUtils rather than relying on the DispatcherServlet attribute. * Moves content to MvcUtils.java * Allows for multiple predicates and filters with the same name. * a get only route is to0 broad and causes a request loop * Save the anded predicate, whoops. Adds some trace logging as well. * Adds initial support for load balancing * Moves TestRestClient to client package * Moves handler related classes to handler package * Creates HandlerDiscoverer to dynamically load HandlerFunctions * polish * polish * Extracts findOperation()ˆ * Extracts invokeOperation() * Adds support for config uri type lb://serviceId * Adds uri template variable support. Adds supporting methods to MvcUtils.java. Expands uri templates in existing filters. * Adds support for host predicate * Adds support for circuit breaker filter * Adds initial support for retry filter * Adds initial support for Bucket4j rateLimit filter * Removes separate *Supplier classes if not needed. * Adds header request predicate * Fixes accept() methods to better values. * Adds support for cookie predicate * Adds support for after, before and between time predicates * Adds support for FilterFunctions.rewritePath() * Adds support for shortcut configuration. Adds Shortcut annotation to provide hints. Extracts OperationMethod into an interface with DefaultOperationMethod the impl. Adds NormalizedOperationMethod which uses the Shortcut annotation to normalize the arguments and give them the right keys. All Shortcut logic is here. * Format comments * Adds support for Forwarded and X-Forwarded-* Headers * Moves TestLoadBalancerConfig to top level to shareˆ * Uses JdkClientHttpRequestFactory. * Adds routeId to RouterFunction.withAttribute() * Adds toString()ˆ * Shows sample of combining java dsl * Implements refresh of config based routes. * Adds support for proxying multipart form data. * removes unneeded multipart propertyˆ * Adds support for RestClientProxyExchange Not yet the default. Waiting for a change that will eliminate reflection in RestClientProxyExchange Created ProxyExchange.DefaultRequestBuilder as the code was duplicated in the two implementations. * polishes ProxyExchangeHandlerFunction * Adds ProxyExchange.ResponseConsumer Adds ProxyExchange.Response and migrates away from ResponseHeadersFilter on the request to something more generic. * Closes clientHttpResponse appropriately. * Closes clientHttpResponse appropriately. * Updates to use new WriteFunction interface * Removes unused apache httpclient5 dependency * Uses new RestClientCustomizer to add ClientHttpRequestFactory. Changes constructor of RestClientProxyExchange to take a RestClient.
The initial implementation is there. Track the TODO list #2949 (comment) for additional things for M1. Remaining TODO's will get added to new issues for upcoming milestones. |
@sandipchitale reading my SO answer and after adding support for multipart formdata (file uploads), I believe (though I haven't verified) that the modifications I made to multipart handling for an MVC gateway will eliminate previous problems with zuul. Basically, I turn off multipart parsing for gateway requests. 863a199#diff-af291548ea3a7b7c047c3de2f9ef6d6ba8402251f8683be19056eb60dddde0eeR62-R75 |
@spencergibb |
@spencergibb thanks for the hard work! May I know when the M2 will be released? |
Next week, but this was released in M1 |
We have an implementation in a SpringMVC (gateway+angular frontend app) with embedded @EnableZuulProxy. Now that NetFlix Zuul is EOLed we tried to implement some of this using ProxyExchange with mixed success. It will be helpful if there was some guidance provided on how to replace @EnableZuulProxy functionality with Spring Cloud Gateway MVC.fn . Or the provided functionality is already doing what @EnableZuulProxy does? |
It may be the subject of a blog or something, but zuul hasn't been supported for a number of years. This implementation provides much more functionality than the zuul implementation though there are likely incompatibilities. |
Thanks @spencergibb. I am pretty confident that a lot of people may be looking for replacement of @EnableZuulProxy. So either a blog post or some form of documentation on this will be extremely helpful. May be we can request Josh long to do a Spring tip on this topic. |
Would probably need a Servlet implementation ofServerWebExchange
so that predicates and filters can be reused.This was a bad idea, though I tried.
The text was updated successfully, but these errors were encountered: