diff --git a/spring-5-security-oauth/pom.xml b/spring-5-security-oauth/pom.xml
index f200052adf..59150a153f 100644
--- a/spring-5-security-oauth/pom.xml
+++ b/spring-5-security-oauth/pom.xml
@@ -31,7 +31,7 @@
org.thymeleaf.extras
- thymeleaf-extras-springsecurity4
+ thymeleaf-extras-springsecurity5
@@ -66,7 +66,8 @@
- 2.0.1.RELEASE
+ 2.1.0.RELEASE
+ 2.1.0.RELEASE
com.baeldung.oauth2.SpringOAuthApplication
diff --git a/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/CustomAuthorizationRequestResolver.java b/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/CustomAuthorizationRequestResolver.java
new file mode 100644
index 0000000000..025064423d
--- /dev/null
+++ b/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/CustomAuthorizationRequestResolver.java
@@ -0,0 +1,50 @@
+package com.baeldung.oauth2;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
+import org.springframework.security.oauth2.client.web.DefaultOAuth2AuthorizationRequestResolver;
+import org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestResolver;
+import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest;
+
+public class CustomAuthorizationRequestResolver implements OAuth2AuthorizationRequestResolver {
+
+ private OAuth2AuthorizationRequestResolver defaultResolver;
+
+ public CustomAuthorizationRequestResolver(ClientRegistrationRepository repo, String authorizationRequestBaseUri){
+ defaultResolver = new DefaultOAuth2AuthorizationRequestResolver(repo, authorizationRequestBaseUri);
+ }
+
+ @Override
+ public OAuth2AuthorizationRequest resolve(HttpServletRequest request) {
+ OAuth2AuthorizationRequest req = defaultResolver.resolve(request);
+ if(req != null){
+ req = customizeAuthorizationRequest(req);
+ }
+ return req;
+ }
+
+ @Override
+ public OAuth2AuthorizationRequest resolve(HttpServletRequest request, String clientRegistrationId) {
+ OAuth2AuthorizationRequest req = defaultResolver.resolve(request, clientRegistrationId);
+ if(req != null){
+ req = customizeAuthorizationRequest(req);
+ }
+ return req;
+ }
+
+ private OAuth2AuthorizationRequest customizeAuthorizationRequest(OAuth2AuthorizationRequest req) {
+ Map extraParams = new HashMap();
+ extraParams.putAll(req.getAdditionalParameters()); //VIP note
+ extraParams.put("test", "extra");
+ System.out.println("here =====================");
+ return OAuth2AuthorizationRequest.from(req).additionalParameters(extraParams).build();
+ }
+
+ private OAuth2AuthorizationRequest customizeAuthorizationRequest1(OAuth2AuthorizationRequest req) {
+ return OAuth2AuthorizationRequest.from(req).state("xyz").build();
+ }
+}
diff --git a/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/CustomRequestEntityConverter.java b/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/CustomRequestEntityConverter.java
new file mode 100644
index 0000000000..8884065769
--- /dev/null
+++ b/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/CustomRequestEntityConverter.java
@@ -0,0 +1,26 @@
+package com.baeldung.oauth2;
+
+import org.springframework.core.convert.converter.Converter;
+import org.springframework.http.RequestEntity;
+import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest;
+import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequestEntityConverter;
+import org.springframework.util.MultiValueMap;
+
+public class CustomRequestEntityConverter implements Converter> {
+
+ private OAuth2AuthorizationCodeGrantRequestEntityConverter defaultConverter;
+
+ public CustomRequestEntityConverter() {
+ defaultConverter = new OAuth2AuthorizationCodeGrantRequestEntityConverter();
+ }
+
+ @Override
+ public RequestEntity> convert(OAuth2AuthorizationCodeGrantRequest req) {
+ RequestEntity> entity = defaultConverter.convert(req);
+ MultiValueMap params = (MultiValueMap) entity.getBody();
+ params.add("test2", "extra2");
+ System.out.println(params.entrySet());
+ return new RequestEntity<>(params, entity.getHeaders(), entity.getMethod(), entity.getUrl());
+ }
+
+}
diff --git a/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/CustomTokenResponseConverter.java b/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/CustomTokenResponseConverter.java
new file mode 100644
index 0000000000..741f44871a
--- /dev/null
+++ b/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/CustomTokenResponseConverter.java
@@ -0,0 +1,67 @@
+package com.baeldung.oauth2;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.springframework.core.convert.converter.Converter;
+import org.springframework.security.oauth2.core.OAuth2AccessToken;
+import org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse;
+import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
+import org.springframework.util.StringUtils;
+
+public class CustomTokenResponseConverter implements Converter