package com.mossle.security.impl; import java.util.HashMap; import java.util.List; import java.util.Map; import com.mossle.core.http.HttpHandler; import com.mossle.core.http.HttpHandlerImpl; import com.mossle.core.mapper.JsonMapper; import com.mossle.security.api.UserFetcher; import com.mossle.security.api.UserInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.core.userdetails.UsernameNotFoundException; public class HttpUserFetcher implements UserFetcher { private static Logger logger = LoggerFactory .getLogger(HttpUserFetcher.class); private HttpHandler httpHandler = new HttpHandlerImpl(); private String url; private String defaultAppId = "1"; private String defaultRepoCode = "1"; public UserInfo getUserInfo(String username) { return getUserInfo(username, defaultAppId, defaultRepoCode); } public UserInfo getUserInfo(String username, String appId) { return getUserInfo(username, appId, defaultRepoCode); } public UserInfo getUserInfo(String username, String appId, String repoCode) { Map<String, Object> parameterMap = new HashMap<String, Object>(); parameterMap.put("username", username); parameterMap.put("appId", appId); parameterMap.put("repoCode", repoCode); try { String content = httpHandler.readText(url, parameterMap); logger.info(content); JsonMapper jsonMapper = new JsonMapper(); Map map = jsonMapper.fromJson(content, Map.class); logger.debug("{}", map); long userId = ((Number) map.get("userId")).longValue(); List<String> authorities = (List<String>) map.get("authorities"); List<String> attributes = (List<String>) map.get("attributes"); UserInfoImpl userInfo = new UserInfoImpl(); userInfo.setUsername(username); userInfo.setPassword((String) map.get("password")); userInfo.setAuthorities(authorities); userInfo.setAttributes(attributes); userInfo.getExtra().put("userId", userId); userInfo.getExtra().put("appId", appId); return userInfo; } catch (Exception ex) { logger.error(ex.getMessage(), ex); throw new UsernameNotFoundException(username, ex); } } public void setUrl(String url) { this.url = url; } public void setDefaultAppId(String defaultAppId) { this.defaultAppId = defaultAppId; } public void setDefaultRepoCode(String defaultRepoCode) { this.defaultRepoCode = defaultRepoCode; } public void setHttpHandler(HttpHandler httpHandler) { this.httpHandler = httpHandler; } }