@RequestMapping(value = "/login/callback/{origin}") public String handleXOAuthCallback(HttpSession session) { String redirectLocation = "/home"; SavedRequest savedRequest = (SavedRequest) session.getAttribute(SAVED_REQUEST_SESSION_ATTRIBUTE); if (savedRequest != null && savedRequest.getRedirectUrl() != null) { redirectLocation = savedRequest.getRedirectUrl(); } return "redirect:" + redirectLocation; }
protected boolean hasSavedOauthAuthorizeRequest(HttpSession session) { if (session == null || session.getAttribute(SAVED_REQUEST_SESSION_ATTRIBUTE) == null) { return false; } SavedRequest savedRequest = (SavedRequest) session.getAttribute(SAVED_REQUEST_SESSION_ATTRIBUTE); String redirectUrl = savedRequest.getRedirectUrl(); String[] client_ids = savedRequest.getParameterValues("client_id"); if (redirectUrl != null && redirectUrl.contains("/oauth/authorize") && client_ids != null && client_ids.length != 0) { return true; } return false; }
@Test public void save_returns_correct_object() { request.setParameter(FORM_REDIRECT_PARAMETER, redirectUri); cache.saveClientRedirect(request, request.getParameter(FORM_REDIRECT_PARAMETER)); HttpSession session = request.getSession(false); assertNotNull(session); SavedRequest savedRequest = (SavedRequest) session.getAttribute(SAVED_REQUEST_SESSION_ATTRIBUTE); assertNotNull(savedRequest); assertEquals(redirectUri, savedRequest.getRedirectUrl()); assertEquals(GET.name(), savedRequest.getMethod()); }
public SimpleSavedRequest(SavedRequest request) { this.redirectUrl = request.getRedirectUrl(); this.cookies = request.getCookies(); for (String headerName : request.getHeaderNames()) { this.headers.put(headerName, request.getHeaderValues(headerName)); } this.locales = request.getLocales(); this.parameters = request.getParameterMap(); }
ofNullable(session) .flatMap(s -> ofNullable((SavedRequest) s.getAttribute(SAVED_REQUEST_SESSION_ATTRIBUTE))) .flatMap(sr -> ofNullable(sr.getParameterValues("login_hint"))) .flatMap(lhValues -> Arrays.asList(lhValues).stream().findFirst());
public static boolean isContentTypeJson(SavedRequest request) { return request.getHeaderValues(CONTENT_TYPE).contains(CONTENT_TYPE_JSON); } }
@Override public String getMethod() { return savedRequest.getMethod(); }
public Map<String, Object> getClientInfo(HttpSession session) { if (!hasSavedOauthAuthorizeRequest(session)) { return null; } SavedRequest savedRequest = (SavedRequest) session.getAttribute(SAVED_REQUEST_SESSION_ATTRIBUTE); String[] client_ids = savedRequest.getParameterValues("client_id"); try { ClientDetails clientDetails = clientDetailsService.loadClientByClientId(client_ids[0], IdentityZoneHolder.get().getId()); return clientDetails.getAdditionalInformation(); } catch (NoSuchClientException x) { return null; } }
public static boolean isAjax(SavedRequest request) { return request.getHeaderValues(X_REQUESTED_WITH).contains(XML_HTTP_REQUEST); }
@RequestMapping(value = "/autologin", method = GET) public String performAutologin(HttpSession session) { if (mfaChecker.isMfaEnabled(IdentityZoneHolder.get(), "uaa")) { throw new BadCredentialsException("MFA is required"); } String redirectLocation = "home"; SavedRequest savedRequest = (SavedRequest) session.getAttribute(SAVED_REQUEST_SESSION_ATTRIBUTE); if (savedRequest != null && savedRequest.getRedirectUrl() != null) { redirectLocation = savedRequest.getRedirectUrl(); } return "redirect:" + redirectLocation; }
private MockHttpServletRequest getMockHttpServletRequest() { MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpSession session = new MockHttpSession(); SavedRequest savedRequest = mock(SavedRequest.class); when(savedRequest.getParameterValues("client_id")).thenReturn(new String[]{"client-id"}); when(savedRequest.getRedirectUrl()) .thenReturn("http://localhost:8080/uaa/oauth/authorize?client_id=identity&redirect_uri=http%3A%2F%2Flocalhost%3A8888%2Flogin&response_type=code&state=8tp0tR"); session.setAttribute(SAVED_REQUEST_SESSION_ATTRIBUTE, savedRequest); request.setSession(session); return request; }
if (savedRequest != null) String redirectUrl = savedRequest.getRedirectUrl(); if (redirectUrl != null && savedRequest.getMethod().equalsIgnoreCase("get"))
if (hasSavedOauthAuthorizeRequest(session)) { SavedRequest savedRequest = (SavedRequest) session.getAttribute(SAVED_REQUEST_SESSION_ATTRIBUTE); String[] client_ids = savedRequest.getParameterValues("client_id"); try { clientDetails = clientDetailsService.loadClientByClientId(client_ids[0], IdentityZoneHolder.get().getId());
public static boolean isContentTypeJson(SavedRequest request) { return request.getHeaderValues(CONTENT_TYPE).contains(CONTENT_TYPE_JSON); } }
@GetMapping("/authentication/require") @ResponseStatus(HttpStatus.UNAUTHORIZED) public String requireAuthentication(HttpServletRequest request, HttpServletResponse response) throws IOException { SavedRequest savedRequest = requestCache.getRequest(request, response); if (savedRequest != null) { String targetUrl = savedRequest.getRedirectUrl(); if (StringUtils.endsWithIgnoreCase(targetUrl, ".html")) redirectStrategy.sendRedirect(request, response, "/login.html"); } return "访问的资源需要身份认证!"; } }
@Test public void testFilterIdpsForDefaultZone() throws Exception { // mock session and saved request MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpSession session = new MockHttpSession(); SavedRequest savedRequest = mock(SavedRequest.class); when(savedRequest.getParameterValues("client_id")).thenReturn(new String[]{"client-id"}); when(savedRequest.getRedirectUrl()).thenReturn("http://localhost:8080/uaa"); session.setAttribute(SAVED_REQUEST_SESSION_ATTRIBUTE, savedRequest); request.setSession(session); // mock SamlIdentityProviderConfigurator when(mockIDPConfigurator.getIdentityProviderDefinitions((List<String>) isNull(), eq(IdentityZone.getUaa()))).thenReturn(idps); LoginInfoEndpoint endpoint = getEndpoint(); endpoint.setIdpDefinitions(mockIDPConfigurator); endpoint.loginForHtml(model, null, request, Collections.singletonList(MediaType.TEXT_HTML)); Collection<SamlIdentityProviderDefinition> idpDefinitions = (Collection<SamlIdentityProviderDefinition>) model.asMap().get("idpDefinitions"); assertEquals(2, idpDefinitions.size()); Iterator<SamlIdentityProviderDefinition> iterator = idpDefinitions.iterator(); SamlIdentityProviderDefinition clientIdp = iterator.next(); assertEquals("awesome-idp", clientIdp.getIdpEntityAlias()); assertEquals(true, clientIdp.isShowSamlLink()); clientIdp = iterator.next(); assertEquals("my-client-awesome-idp", clientIdp.getIdpEntityAlias()); assertEquals(true, clientIdp.isShowSamlLink()); assertEquals(true, model.asMap().get("fieldUsernameShow")); assertEquals(true, model.asMap().get("linkCreateAccountShow")); }
if (savedRequest != null) String redirectUrl = savedRequest.getRedirectUrl(); if (redirectUrl != null && savedRequest.getMethod().equalsIgnoreCase("get")) servletWebRequest.setAttribute(SAVED_REQUEST_URL_ATTRIBUTE_NAME, savedRequest.getRedirectUrl(), RequestAttributes.SCOPE_SESSION);
@Test public void testLoginHintOriginUaaDoubleEncoded() throws Exception { MockHttpServletRequest mockHttpServletRequest = getMockHttpServletRequest(); LoginInfoEndpoint endpoint = getEndpoint(); ClientServicesExtension clientDetailsService = mockClientService(); endpoint.setClientDetailsService(clientDetailsService); SavedRequest savedRequest = (SavedRequest) mockHttpServletRequest.getSession().getAttribute(SAVED_REQUEST_SESSION_ATTRIBUTE); when(savedRequest.getParameterValues("login_hint")).thenReturn(new String[]{URLEncoder.encode("{\"origin\":\"uaa\"}", "utf-8")}); endpoint.loginForHtml(model, null, mockHttpServletRequest, Collections.singletonList(MediaType.TEXT_HTML)); assertTrue(model.get("login_hint").equals(URLEncoder.encode("{\"origin\":\"uaa\"}", "utf-8"))); }
@Override public String getHeader(String name) { List<String> values = savedRequest.getHeaderValues(name); return values.isEmpty() ? null : values.get(0); }
SavedRequest savedRequest = cache.getRequest(request, response); if (savedRequest != null) { logger.debug("Redirecting request to " + savedRequest.getRedirectUrl()); sendRedirect(savedRequest.getRedirectUrl(), request, response); } else { logger.debug("Redirecting request to /");