BaseController のファンクションは以下の作業に基本操作を処理します。
NeApiClientServiceを利用してAPIからの結果を取得します。- ネクストエンジンの ログイン認証 に利用するために、セッションのトークン変数を確認・保存・処理します。
- 企業・ユーザ の情報を取得します。
コントローラーはこのクラスから引き継ぐアプリの詳細機能・操作を処理します。
セッションに保存されている (access_token、refresh_token) トークンの情報を取得します。
public NeToken getCurrentToken(HttpServletRequest request) {
return (NeToken) request.getSession().getAttribute(NeToken.class.getName());
}ネクストエンジンへのログインを催促するために NeApiClientService を利用します。
public HashMap<String, Object> neLogin(HttpServletRequest request, HttpServletResponse response, String referrerPath) {
return neApiClientService.requireLogin(request, response, authClientProperty.getClientId(),
authClientProperty.getClientSecret(), referrerPath);
}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());
}
}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;
}返却される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());
}セッションにトークンの情報を保存します。
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);
}APIから企業の情報を取得するために NeApiClientService を利用します。
public HashMap<String, Object> fetchCompanyInfo(String accessToken, String refreshToken) {
return neApiClientService.neApiExecute(NeApiURL.COMPANY_INFO_PATH,
accessToken, refreshToken);
}APIからユーザの情報を取得するために NeApiClientService 利用します。
public HashMap<String, Object> fetchUserInfo(String accessToken, String refreshToken) {
return neApiClientService.neApiExecute(NeApiURL.USER_INFO_PATH,
accessToken, refreshToken);
}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
(ユーザがログインを催促される前に利用したページ) 参照パースを取得します。ネクストエンジンにログインした後に AuthController の callback ファンクションはその参照ページへリダイレクトします。
public String getReferrerPath(HttpServletRequest request) {
if (request.getParameter("path") != null) {
return request.getParameter("path");
}
return Constant.ROOT_PATH;
}