dolphinscheduler icon indicating copy to clipboard operation
dolphinscheduler copied to clipboard

[Bug] [api-server]oauth2 The first time failed, the failed link was successfully requested again. Modify the source code: No error will be reported after removing CookieLocaleResolver in AppConfiguration.

Open HWENK opened this issue 2 years ago • 3 comments

Search before asking

  • [X] I had searched in the issues and found no similar issues.

What happened

Use oauth2 to connect to the internal user center. After authentication, GET request: http://127.0.0.1:12345/dolphinscheduler/redirect/login/oauth2?provider=xxxx&code=xxxxxxx. The first time the CookieLocaleResolver is requested, a null pointer is reported. The same code is used again. The request successfully logs in to the dolphinscheduler homepage. After comparing the header information of the two requests, they are exactly the same. The same problem will occur when using edge and chrome.

Try to fix: When modifying the dolphinscheduler-api project and AppConfiguration source code to block the creation of CookieLocaleResolver, each login can be successful directly. (localePart is null ) `

		// Retrieve and parse cookie value.
		String cookieName = getCookieName();
		if (cookieName != null) {
			Cookie cookie = WebUtils.getCookie(request, cookieName);
			if (cookie != null) {
				String value = cookie.getValue();
				String localePart = value;
				String timeZonePart = null;
				int separatorIndex = localePart.indexOf('/');
				if (separatorIndex == -1) {
					// Leniently accept older cookies separated by a space...
					separatorIndex = localePart.indexOf(' ');
				}`

The error details are as follows: java.lang.NullPointerException: null at org.springframework.web.servlet.i18n.CookieLocaleResolver.parseLocaleCookieIfNecessary(CookieLocaleResolver.java:226) at org.springframework.web.servlet.i18n.CookieLocaleResolver.resolveLocaleContext(CookieLocaleResolver.java:198) at org.springframework.web.servlet.DispatcherServlet.buildLocaleContext(DispatcherServlet.java:1181) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:995) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) at javax.servlet.http.HttpServlet.service(HttpServlet.java:497) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:584) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:618) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:229) at org.eclipse.jetty.server.Dispatcher.error(Dispatcher.java:86) at org.eclipse.jetty.server.handler.ErrorHandler.doError(ErrorHandler.java:119) at org.eclipse.jetty.server.handler.ErrorHandler.handle(ErrorHandler.java:95) at org.springframework.boot.web.embedded.jetty.JettyEmbeddedErrorHandler.handle(JettyEmbeddedErrorHandler.java:57) at org.eclipse.jetty.server.HttpChannel.lambda$handle$3(HttpChannel.java:536) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:534) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)

What you expected to happen

GET request: http://127.0.0.1:12345/dolphinscheduler/redirect/login/oauth2?provider=xxxx&code=xxxxxxx It should jump successfully the first time.

How to reproduce

Use oauth2 to connect to login authentication (connect to the internal authentication system, try to connect to gitee or github if there is any problem)

Anything else

No response

Version

3.2.x

Are you willing to submit PR?

  • [ ] Yes I am willing to submit a PR!

Code of Conduct

HWENK avatar Dec 06 '23 03:12 HWENK

老哥,你的oauth2的callback和redirectUri配置是咋样的啊,我遇到了和你一样的报错,但是我进不去主页,登录就反复报错这个,一起探讨下这个问题啊,社区也没人回应

MargeDog avatar Jan 12 '24 03:01 MargeDog

callbackUrl = http://127.0.0.1:12345/dolphinscheduler/ui/login

@.***

From: Olivia Parker Date: 2024-01-12 12:00 To: apache/dolphinscheduler CC: HWENK; Author Subject: Re: [apache/dolphinscheduler] [Bug] [api-server]oauth2 The first time failed, the failed link was successfully requested again. Modify the source code: No error will be reported after removing CookieLocaleResolver in AppConfiguration. (Issue #15284) 老哥,你的oauth2的callback和redirectUri配置是咋样的啊,我遇到了和你一样的报错,但是我进不去主页,登录就反复报错这个,一起探讨下这个问题啊,社区也没人回应 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

HWENK avatar Jan 12 '24 05:01 HWENK

. (Issue #15284) 我按楼上老哥说的 removing CookieLocaleResolver in AppConfiguration(注释掉这个Bean) 解决了这个问题。有个要注意的点redirectUri: http://macbook:12345/dolphinscheduler/redirect/login/oauth2 是这个 没有/ui/ 因为是调后端接口 然后再执行重定向

opop32165455 avatar Jan 31 '24 10:01 opop32165455