@@ -238,6 +238,7 @@ private LoginForm loadLoginForm(HttpSession session) {
238238 "state" , UUID .randomUUID ().toString (),
239239 "nonce" , UUID .randomUUID ().toString ()
240240 ));
241+ response = followRedirectIfNeeded (session , response );
241242 assertEquals (200 , response .statusCode (), "Unable to load login page" );
242243 return LoginForm .parse (response .getBody ().asString ());
243244 }
@@ -260,6 +261,7 @@ private LoginForm submitLoginForm(HttpSession session, LoginForm form, String us
260261
261262 private ResetPasswordForm loadResetPasswordForm (HttpSession session , String url ) {
262263 Response response = session .get (url , Collections .emptyMap ());
264+ response = followRedirectIfNeeded (session , response );
263265 assertEquals (200 , response .statusCode (), "Unable to load reset password form" );
264266 return ResetPasswordForm .parse (response .getBody ().asString ());
265267 }
@@ -293,6 +295,22 @@ private static String toAbsoluteUrl(String url) {
293295 return KEYCLOAK_CONTAINER .getAuthServerUrl () + url ;
294296 }
295297
298+ private Response followRedirectIfNeeded (HttpSession session , Response response ) {
299+ if (response == null ) {
300+ return null ;
301+ }
302+ if (!isRedirect (response .statusCode ())) {
303+ return response ;
304+ }
305+ String location = response .getHeader ("Location" );
306+ assertNotNull (location , "Redirect response missing Location header" );
307+ return session .get (toAbsoluteUrl (location ), Collections .emptyMap ());
308+ }
309+
310+ private boolean isRedirect (int statusCode ) {
311+ return statusCode == 301 || statusCode == 302 || statusCode == 303 || statusCode == 307 || statusCode == 308 ;
312+ }
313+
296314 private record KeycloakEvent (String type , String error , Map <String , String > details ) {
297315 }
298316
0 commit comments