Login

Prerequisites

To login you need:

  1. send redirect in context based on HttpServlet (JSP, Spring MVC Controllers, RestControllers etc) to authorizeURI.
  2. send POST request with client credentials with code.
  3. receive access token.

Let’s see how it looks like.

@RequestMapping(value = "/", method = RequestMethod.GET)
public ModelAndView welcome(ModelAndView view, WebRequest webRequest, Model model) {
    view.setViewName(START_VIEW_NAME);
    return view;
}

@RequestMapping(value = LOGIN_RELATIVE_URL, method = RequestMethod.GET)
public View login(ModelAndView modelAndView,  WebRequest webRequest) throws URISyntaxException, IOException {
    String oAuth2AuthirizationUrl = IvisOAuth2Utils.getOAuth2AuthirizationUrl(client, redirectUrl, false);
    return new RedirectView(oAuth2AuthirizationUrl, false);
}

@RequestMapping(value = REDIRECT_RELATIVE_URL, method = RequestMethod.GET)
public View authorizationClientProcess(HttpServletRequest request,
                                       HttpServletResponse response,
                                       WebRequest webRequest,
                                       @SessionAttribute(value = IvisAuthorizedFilter.REQUEST_URI_ATTRIBUTE_NAME, required = false) String protectedResourcesUrl,
                                       @RequestParam("code") String code) throws IOException {
    OAuth2AccessToken accessToken = IvisOAuth2Utils.getAccessToken(client, code, redirectUrl);
    if (accessToken == null) {
        return new RedirectView(LOGIN_RELATIVE_URL, true);
    }
    IvisOAuth2Utils.setAccessToken(request, accessToken);
    IvisOAuth2Utils.setRefreshTokenAsCokie(response, accessToken.getRefreshToken(), clientProperties.getRefreshTokenValiditySeconds());
    String redirect = StringUtils.isEmpty(protectedResourcesUrl) ? "/" : protectedResourcesUrl;
    if (redirect.startsWith(request.getContextPath())) {
        redirect = redirect.replace(request.getContextPath(), "");
    }
    return new RedirectView(redirect, true);
}