2

我試圖從遷移春季啓動1.5.72.0.0.M4春季啓動2.0.0.M4的OAuth2令牌端點拋出org.springframework.web.HttpRequestMethodNotSupportedException

現在我無法正確地重新配置我的OAuth2 +智威湯遜在春季啓動配置2.0.0.M4

在啓動過程中,我發現下面的錯誤日誌中/oauth/token端點(throws org.springframework.web.HttpRequestMethodNotSupportedException):

2017-10-04 09:52:46.841 INFO 11780 --- [   main] .s.o.p.e.FrameworkEndpointHandlerMapping : Mapped "{[/oauth/authorize],methods=[POST],params=[user_oauth_approval]}" onto public org.springframework.web.servlet.View org.springframework.security.oauth2.provider.endpoint.AuthorizationEndpoint.approveOrDeny(java.util.Map<java.lang.String, java.lang.String>,java.util.Map<java.lang.String, ?>,org.springframework.web.bind.support.SessionStatus,java.security.Principal) 
2017-10-04 09:52:46.842 INFO 11780 --- [   main] .s.o.p.e.FrameworkEndpointHandlerMapping : Mapped "{[/oauth/authorize]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.security.oauth2.provider.endpoint.AuthorizationEndpoint.authorize(java.util.Map<java.lang.String, java.lang.Object>,java.util.Map<java.lang.String, java.lang.String>,org.springframework.web.bind.support.SessionStatus,java.security.Principal) 
2017-10-04 09:52:46.843 INFO 11780 --- [   main] .s.o.p.e.FrameworkEndpointHandlerMapping : Mapped "{[/oauth/token],methods=[GET]}" onto public org.springframework.http.ResponseEntity<org.springframework.security.oauth2.common.OAuth2AccessToken> org.springframework.security.oauth2.provider.endpoint.TokenEndpoint.getAccessToken(java.security.Principal,java.util.Map<java.lang.String, java.lang.String>) throws org.springframework.web.HttpRequestMethodNotSupportedException 
2017-10-04 09:52:46.844 INFO 11780 --- [   main] .s.o.p.e.FrameworkEndpointHandlerMapping : Mapped "{[/oauth/token],methods=[POST]}" onto public org.springframework.http.ResponseEntity<org.springframework.security.oauth2.common.OAuth2AccessToken> org.springframework.security.oauth2.provider.endpoint.TokenEndpoint.postAccessToken(java.security.Principal,java.util.Map<java.lang.String, java.lang.String>) throws org.springframework.web.HttpRequestMethodNotSupportedException 
2017-10-04 09:52:46.845 INFO 11780 --- [   main] .s.o.p.e.FrameworkEndpointHandlerMapping : Mapped "{[/oauth/check_token]}" onto public java.util.Map<java.lang.String, ?> org.springframework.security.oauth2.provider.endpoint.CheckTokenEndpoint.checkToken(java.lang.String) 
2017-10-04 09:52:46.845 INFO 11780 --- [   main] .s.o.p.e.FrameworkEndpointHandlerMapping : Mapped "{[/oauth/confirm_access]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.security.oauth2.provider.endpoint.WhitelabelApprovalEndpoint.getAccessConfirmation(java.util.Map<java.lang.String, java.lang.Object>,javax.servlet.http.HttpServletRequest) throws java.lang.Exception 
2017-10-04 09:52:46.846 INFO 11780 --- [   main] .s.o.p.e.FrameworkEndpointHandlerMapping : Mapped "{[/oauth/error]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.security.oauth2.provider.endpoint.WhitelabelErrorEndpoint.handleError(javax.servlet.http.HttpServletRequest) 
2017-10-04 09:52:46.848 INFO 11780 --- [   main] .s.o.p.e.FrameworkEndpointHandlerMapping : Mapped "{[/oauth/token_key],methods=[GET]}" onto public java.util.Map<java.lang.String, java.lang.String> org.springframework.security.oauth2.provider.endpoint.TokenKeyEndpoint.getKey(java.security.Principal) 

我n階重現這個問題,我HVE創建GitHub的項目 - https://github.com/Artgit/spring-boot-2.0.0.M4-oauth2-token-issue/tree/master/api

我爲了製作這個問題,請嘗試執行com.decisionwanted.domain.api.decision.DecisionControllerIT.testCreateDecision()測試

我在代碼和pom.xml的混亂表示歉意。我已經從多模塊Maven應用程序編譯此測試項目用於測試目的。

請幫我解決我的CONFIGS爲了能夠工作,春季啓動2.0.0.M4

修訂

調試時,我發現server.contextPath: /apiapplication.properties不考慮。現在我需要使用/oauth/token(而不是像我用Spring Boot 1.5.7那樣的/api/oauth/token)來獲取令牌。這可能是什麼原因以及如何解決這個問題?

+0

很遺憾,您的應用程序的過大,在合理數量的理解所以我無法準確診斷問題。但是,我可以通過爲org.springframework.security啓用調試日誌記錄來運行它,並觀察對「/ api/oauth/token」的請求由於無效的CSRF令牌而被拒絕。也許這有助於你指出正確的方向? –

+0

@AndyWilkinson,謝謝你的回答。在調試時,我發現'application.properties'中的'server.contextPath:/ api'沒有考慮到。現在我需要使用'/ oauth/token'(而不是'''/ api/oauth/token',就像我在Spring Boot 1.5.7中使用的一樣)來獲取令牌。這可能是什麼原因? – alexanoid

回答