spring-cloud / spring-cloud-gateway

An API Gateway built on Spring Framework and Spring Boot providing routing and more.
http://cloud.spring.io
Apache License 2.0
4.52k stars 3.32k forks source link

Spring MVC/Servlet implementation #36

Closed spencergibb closed 1 year ago

spencergibb commented 7 years ago

Would probably need a Servlet implementation of ServerWebExchange so that predicates and filters can be reused.

This was a bad idea, though I tried.

joshiste commented 7 years ago

I'm just curious. Will this issue be targeted for a 2.x release?

spencergibb commented 6 years ago

@joshiste it will not be

spencergibb commented 5 years ago

Useful for those who can't (or won't) use webflux.

narasimhamurthyk3 commented 4 years ago

Hi Team,

I have implemented Spring cloud gateway and Eureka discovery server everything working fine. Now I am trying to add OAUTH2 security at Spring cloud gateway, but I can see its not compatible with gateway.

Is it possible to implement oAuth2 at gateway if yes can anyone share sample code please.

wzlee commented 4 years ago

Is there any progress?

spencergibb commented 4 years ago

No

pards commented 4 years ago

Is there a plan to allow Spring MVC? This prevents us from using our common libraries such logging filters in our gateway implementation.

spencergibb commented 4 years ago

https://github.com/spring-cloud/spring-cloud-gateway/issues/36#issuecomment-625247538

mohanrao commented 3 years ago

@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

spencergibb commented 3 years ago

@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.

mohanrao commented 3 years ago

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

Jeffrey-Hassan commented 3 years ago

+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?

spencergibb commented 3 years ago

Until it gets assigned a project or milestone, you can assume no progress.

mohanrao commented 3 years ago

@spencergibb is there any mechanism available to vote to get this needs to assigned to a project or milestone

spencergibb commented 3 years ago

The reaction in https://github.com/spring-cloud/spring-cloud-gateway/issues/36#issue-216130146 is the only voting we have. Note, this is a major effort and basically a parallel implementation.

spencergibb commented 3 years ago

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

anbusampath commented 1 year ago

+1 as Project Loom getting finalized. It's good to have Spring MVC based Gateway.

sandipchitale commented 1 year ago

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.

spencergibb commented 1 year ago

This will not bypass the dispatcher servlet. I do not know if that use case is valid outside of zuul

sandipchitale commented 1 year ago

I meant the original implementation in Netflix Zuul provided the /zuul/ prefix based bypass of DispatcherServlet because of some suckiness (a comment I saw on SO - https://stackoverflow.com/a/32100705 ) in DispatcherServlet, I think related to buffering of request/response or something like that. That will still be the issue in new SCG MVC implementation right? Hence my question. May be I am misunderstanding as to why originally /zuul/ support was added. And I did not mean to ask for exact /zuul/ prefix solution, but equivalent that deals with the original isuue.

spencergibb commented 1 year ago

The initial implementation is there. Track the TODO list https://github.com/spring-cloud/spring-cloud-gateway/pull/2949#issue-1703012276 for additional things for M1. Remaining TODO's will get added to new issues for upcoming milestones.

spencergibb commented 1 year ago

@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.

https://github.com/spring-cloud/spring-cloud-gateway/pull/2949/commits/863a19928ee7c36b59baf0e7d561459a97a7d7e4#diff-af291548ea3a7b7c047c3de2f9ef6d6ba8402251f8683be19056eb60dddde0eeR62-R75

giger85 commented 1 year ago

@spencergibb This function is very interesting. I will try to change my application from webflux to mvc with upcoming spring boot 3.2 and virtual thread.

patrickli2013 commented 1 year ago

@spencergibb thanks for the hard work! May I know when the M2 will be released?

spencergibb commented 1 year ago

Next week, but this was released in M1

sandipchitale commented 1 year ago

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?

spencergibb commented 1 year ago

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.

sandipchitale commented 1 year ago

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.