프로그래밍/- eGov
post 통신으로 sso
즐겁게 하하하
2022. 10. 31. 10:26
728x90
@RequestMapping(value = "/api/testNs.do", method = {RequestMethod.POST, RequestMethod.GET} , consumes = {"application/x-www-form-urlencoded"} )
public ModelAndView testNs( @RequestParam Map<String, String> getParam , HttpServletRequest request , SessionVO sessionVO , SearchVO searchVO ) throws Exception {
ModelAndView model = new ModelAndView();
String sRemoteClientIP = EgovClntInfo.getClntIP(request);
// 연동대상 자동 로그인 연동
System.out.println("===== /api/testNs.do getParam =====" + getParam.toString() );
String ParamData = "{ \"user\" : \"" + (String) getParam.get("user") + "\", \"token\" : \""+ (String) getParam.get("token") +"\" }"; //json 형식 데이터
String url = "https://연동대상";
// 연동대상 회원정보 요청
String returnData = httpsPostBodyConnectionAndAutoLogin(url, ParamData);
//JSON 타입으로 변경
JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(returnData);
//username 과 member_no로 password 를 찾는다.
Map<String, Object> userMap = new HashMap<String, Object>();
userMap.put("userId", jsonObject.get("username") );
userMap.put("memberNo", jsonObject.get("member_no") );
userMap.put("useAt","Y"); // 사용중인 회원만
EgovMap rUserVO = cmmnService.select("user.selectUser", userMap); // 사용자 정보 조회
if( rUserVO != null ) {
// 회사 정보 조회
SearchVO searchVo = new SearchVO();
searchVo.setTenancyId( (String)rUserVO.get("tenancyId") );
EgovMap corpInfo = cmmnService.select("corp.selectCorpInfo", searchVo);
// 세션저장객체 생성
sessionVO.setsLoginId((String) rUserVO.get("userId"));
sessionVO.setsLoginPwd((String) rUserVO.get("userPwd"));
sessionVO.setsMemberNo((String) rUserVO.get("memberNo"));
sessionVO.setsLoginNm((String)rUserVO.get("userNm"));
sessionVO.setsAuthId((String)rUserVO.get("authId"));
sessionVO.setsAuthNm((String)rUserVO.get("authNm"));
sessionVO.setsPhnNum((String)rUserVO.get("phnNum"));
sessionVO.setsCelNum((String)rUserVO.get("celNum"));
sessionVO.setViewTime(propertiesService.getString("viewTime"));
sessionVO.setTenancyId((String) rUserVO.get("tenancyId")); // 2022-09-02 : 공장별 스키마명 sTenancyId
sessionVO.setSchemaNm((String) corpInfo.get("corpSchemaName"));
sessionVO.setsCorpServiceStatus( (Integer)corpInfo.get("corpServiceStatus") );
sessionVO.setsCorpNm((String)corpInfo.get("corpNm"));
sessionVO.setsCorpId((String)corpInfo.get("corpId"));
sessionVO.setSanctNm((String)corpInfo.get("sanctNm"));
// 메뉴
searchVO.setsAuthId( (String)rUserVO.get("authId") );
searchVO.setSchemaNm( (String) corpInfo.get("corpSchemaName") );
List<?> menuList = cmmnService.selectList("main.selectMainMenuList", searchVO);
sessionVO.setsMenuList(menuList);
// 로그인 이력
EgovMap userLoginMap = new EgovMap();
userLoginMap.put("userId",sessionVO.getsLoginId());
userLoginMap.put("tenancyId",sessionVO.getTenancyId());
String loginSeq = cmmnService.selectStr("userLogin.selectUserLoginMaxSeq", userLoginMap);
sessionVO.setsLoginSeq(loginSeq);
double d = Double.parseDouble(loginSeq);
userLoginMap.put("seq", (int)d);
userLoginMap.put("loginIp", sRemoteClientIP);
userLoginMap.put("loginYn", "Y");
cmmnService.insert("userLogin.insertUserLogin", userLoginMap);
// 로그인 실패 이력 초기화
cmmnService.update("user.updateLoginFailureInit", userLoginMap);
SmartConstants.gWEBURLPATH = propertiesService.getString("urlStorePath") + sessionVO.getSchemaNm() + "/img/"; // Web Image Url Path
SmartConstants.gIMGURLPATH = propertiesService.getString("imageUrlPath") + sessionVO.getSchemaNm() + "/file/"; // 첨부파일 Image Url Path
//sessionVO null 이면 SmartInterceptor 에서 login.do Redirect
request.getSession().setAttribute("sessionVO", sessionVO);
model.setViewName("redirect:/index.do");
}
return model;
}
// 대상 에게 user 와 token 전달하여 사용자 정보 받기 {"member_no":"00000062","username":"adminbb"}
public static String httpsPostBodyConnectionAndAutoLogin(String UrlData, String ParamData ){
//http 요청 시 필요한 url 주소를 변수 선언
String totalUrl = "";
totalUrl = UrlData.trim().toString();
//http 통신을 하기위한 객체 선언 실시
URL url = null;
HttpsURLConnection conn = null;
//http 통신 요청 후 응답 받은 데이터를 담기 위한 변수
String responseData = "";
BufferedReader br = null;
StringBuffer sb = null;
//메소드 호출 결과값을 반환하기 위한 변수
String returnData = "";
try {
//파라미터로 들어온 url을 사용해 connection 실시
url = new URL(totalUrl);
conn = (HttpsURLConnection) url.openConnection();
//http 요청에 필요한 타입 정의 실시
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json; utf-8"); //post body json으로 던지기 위함
conn.setRequestProperty("Accept", "application/json");
conn.setDoOutput(true); //OutputStream을 사용해서 post body 데이터 전송
try (OutputStream os = conn.getOutputStream()){
byte request_data[] = ParamData.getBytes("utf-8");
os.write(request_data);
os.close();
}
catch(Exception e) {
e.printStackTrace();
}
//http 요청 실시
conn.connect();
System.out.println("https 요청 방식 : "+"POST BODY JSON");
System.out.println("https 요청 타입 : "+"application/json");
System.out.println("https 요청 주소 : "+ UrlData);
System.out.println("https 요청 데이터 : "+ ParamData);
System.out.println("");
//http 요청 후 응답 받은 데이터를 버퍼에 쌓는다
br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
sb = new StringBuffer();
while ((responseData = br.readLine()) != null) {
sb.append(responseData); //StringBuffer에 응답받은 데이터 순차적으로 저장 실시
}
//메소드 호출 완료 시 반환하는 변수에 버퍼 데이터 삽입 실시
returnData = sb.toString();
//http 요청 응답 코드 확인 실시
String responseCode = String.valueOf(conn.getResponseCode());
System.out.println("https 응답 코드 : "+ responseCode);
System.out.println("https 응답 데이터 : "+ returnData);
} catch (IOException e) {
e.printStackTrace();
} finally {
//http 요청 및 응답 완료 후 BufferedReader를 닫아줍니다
try {
if (br != null) {
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return returnData;
}
728x90