Skip to content

Latest commit

 

History

History
executable file
·
196 lines (144 loc) · 7.47 KB

File metadata and controls

executable file
·
196 lines (144 loc) · 7.47 KB

BaseController

java.com.co.hm.base.web.BaseController

BaseController のファンクションは以下の作業に基本操作を処理します。

  • NeApiClientService を利用してAPIからの結果を取得します。
  • ネクストエンジンの ログイン認証 に利用するために、セッションのトークン変数を確認・保存・処理します。
  • 企業・ユーザ の情報を取得します。

コントローラーはこのクラスから引き継ぐアプリの詳細機能・操作を処理します。

getCurrentToken

セッションに保存されている (access_token、refresh_token) トークンの情報を取得します。

public NeToken getCurrentToken(HttpServletRequest request) {

    return (NeToken) request.getSession().getAttribute(NeToken.class.getName());
  }
neLogin

ネクストエンジンへのログインを催促するために NeApiClientService を利用します。

public HashMap<String, Object> neLogin(HttpServletRequest request, HttpServletResponse response, String referrerPath) {
    return neApiClientService.requireLogin(request, response, authClientProperty.getClientId(),
            authClientProperty.getClientSecret(), referrerPath);
  }
neApiExecute

APIを呼び出し戻された結果を返却するために NeApiClientService を利用します。

public HashMap<String, Object> neApiExecute(NeToken token,
                                              String apiUrlPath,
                                              HashMap<String, String> apiParams)  {
    if (apiParams == null) {
      return neApiClientService.neApiExecute(apiUrlPath, token.getAccessToken(), token.getRefreshToken());
    } else {
      return neApiClientService.neApiExecute(apiUrlPath, apiParams, token.getAccessToken(), token.getRefreshToken());
    }
  }
neApiExecuteAndSaveToken

APIを呼び出しトークンを保存し戻された結果を返却するために NeApiClientService を利用します。

public HashMap<String, Object> neApiExecuteAndSaveToken(HttpServletRequest request,
                                                          NeToken token,
                                                          String apiUrlPath,
                                                          HashMap<String, String> apiParams)
      throws IllegalAccessException, InstantiationException {

    HashMap<String, Object> apiResponse = neApiExecute(token, apiUrlPath, apiParams);
    saveToken(request, token, apiResponse);

    return apiResponse;
  }
saveToken

返却されるAPIからトークンの情報を取得し、セッションに保存し、取得されたトークンの企業とユーザの情報を取得してデータベースに保存します。

public void saveToken(HttpServletRequest request, NeToken currentToken,
                        HashMap<String, Object> apiResponse) throws InstantiationException, IllegalAccessException{
    Object token = apiResponse.get(NeApiClient.KEY_ACCESS_TOKEN);
    if (token == null) {
      return;
    }
    if (currentToken != null && token.toString().equals(currentToken.getAccessToken())) {
      return;
    }
    saveTokenToSession(request, currentToken, apiResponse);
    C company = createCompany(apiResponse.get(NeApiClient.KEY_ACCESS_TOKEN).toString(), apiResponse.get(NeApiClient.KEY_REFRESH_TOKEN).toString());
    createUser(company.getId(), apiResponse.get(NeApiClient.KEY_ACCESS_TOKEN).toString(), apiResponse.get(NeApiClient.KEY_REFRESH_TOKEN).toString());
  }
saveTokenToSession

セッションにトークンの情報を保存します。

public void saveTokenToSession(HttpServletRequest request, NeToken token, HashMap<String, Object> apiResponse) {
    NeToken neToken = token;
    if (token == null) {
      neToken = new NeToken();
    }
    neToken.setAccessToken(apiResponse.get(NeApiClient.KEY_ACCESS_TOKEN).toString());
    neToken.setRefreshToken(apiResponse.get(NeApiClient.KEY_REFRESH_TOKEN).toString());
    request.getSession().setAttribute(NeToken.class.getName(), neToken);
  }
fetchCompanyInfo

APIから企業の情報を取得するために NeApiClientService を利用します。

public HashMap<String, Object> fetchCompanyInfo(String accessToken, String refreshToken) {
    return neApiClientService.neApiExecute(NeApiURL.COMPANY_INFO_PATH,
            accessToken, refreshToken);
  }
fetchUserInfo

APIからユーザの情報を取得するために NeApiClientService 利用します。

public HashMap<String, Object> fetchUserInfo(String accessToken, String refreshToken) {
    return neApiClientService.neApiExecute(NeApiURL.USER_INFO_PATH,
            accessToken, refreshToken);
  }
getMessage

resources.messages_us.properties からメッセージを取得します。

public String getMessage(String messages) {
    return messageSource.getMessage(messages, new String[]{}, Locale.US);
  }

#####createCompany

APIから企業の情報を取得してデータベースに保存するために NeApiClientService を利用します。

C createCompany(String accessToken, String refreshToken) throws InstantiationException, IllegalAccessException{
    C company = companyClass.newInstance();
    HashMap<String, Object> apiResponse = fetchCompanyInfo(accessToken, refreshToken);
    List<HashMap<String, Object>> listDataResponse = (ArrayList<HashMap<String, Object>>) apiResponse.get("data");
    HashMap<String, Object> dataResponse = listDataResponse.get(0);

    company.setAccessTokenEndDate(apiResponse.get("access_token_end_date").toString());
    company.setRefreshTokenEndDate(apiResponse.get("refresh_token_end_date").toString());

    company.setMainFunctionId(dataResponse.get("company_id").toString());
    company.setPlatformId(dataResponse.get("company_ne_id").toString());
    company.setLastAccessToken(accessToken);
    company.setLastRefreshToken(refreshToken);

    logger.info("BaseCompany info ==============" + company.toString());
    return companyRepository.createOrUpdate(company);
  }

#####createUser

APIからユーザの情報を取得してデータベースに保存するために NeApiClientService を利用します。

U createUser(long companyId, String accessToken, String refreshToken) throws InstantiationException, IllegalAccessException{
    U user = userClass.newInstance();
    List<HashMap<String, Object>> listDataResponse = (ArrayList<HashMap<String, Object>>) fetchUserInfo(accessToken, refreshToken).get("data");
    HashMap<String, Object> dataResponse = listDataResponse.get(0);

    user.setCompanyId(companyId);
    user.setUid(dataResponse.get("uid").toString());

    user.setAccessToken(accessToken);
    user.setRefreshToken(refreshToken);

    logger.info("BaseUser info ==============" + user.toString());
    return userRepository.createOrUpdate(user);
  }

#####getReferrerPath

(ユーザがログインを催促される前に利用したページ) 参照パースを取得します。ネクストエンジンにログインした後に AuthControllercallback ファンクションはその参照ページへリダイレクトします。

public String getReferrerPath(HttpServletRequest request) {
    if (request.getParameter("path") != null) {
      return request.getParameter("path");
    }
    return Constant.ROOT_PATH;
  }