개발 - 넥사크로 강좌

넥사크로 강좌[4] 로그인

개미v 2019. 7. 6. 20:40

 

아래는 전자정부프레임워크에서 넥사크로 로그인 예제 입니다.

 

[SQLITE]

DROP TABLE user;

CREATE TABLE user (
	id varchar(20) PRIMARY KEY,
	pwd varchar(20) NOT NULL,
	name varchar(20) NOT NULL,
	email varchar(20) NOT NULL
);

INSERT INTO user (id, pwd, name, email)
VALUES ('test', '1234', '테스트계정', 'test@naver.com');

 

 

[전자정부 프레임워크]

 

1. Controller0.java

procLogin.do 요청이 왔을 때 로그인 처리를 합니다.

※ 원래 MVC 구성상 서비스 부분이 분리되어야 하지만, 주제 목적상 간단 명료하기 위해 서비스 부분도 컨트롤러 부분에서 구현되었습니다.

package com.study.controller;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.HashMap;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.nexacro17.xapi.data.PlatformData;
import com.nexacro17.xapi.data.VariableList;
import com.nexacro17.xapi.tx.HttpPlatformRequest;
import com.nexacro17.xapi.tx.HttpPlatformResponse;
import com.nexacro17.xapi.tx.PlatformType;


@Controller
public class Controller0{

	// 로그인 처리
	@RequestMapping(value="/procLogin.do", produces="application/xml; charset=UTF8", method = {RequestMethod.POST, RequestMethod.GET})
	@ResponseBody
	public void procLogin(HttpSession session, HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		int retCode;
		String retMsg;

		// id, pwd 파라미터
		HttpPlatformRequest pReq = new HttpPlatformRequest(request);
		pReq.receiveData();
		PlatformData in_pData = pReq.getData();
		VariableList in_varList = in_pData.getVariableList();
		
		String id = in_varList.getString("id");
		String pwd = in_varList.getString("pwd");

		// 로그인 처리
		boolean rst = isUser(id, pwd);
		
		if(rst) {
			// 세션 등록
			HashMap<String, Object> userMap = getUser(id);
			session.setAttribute("USER", userMap);
			
			retCode = 0;
			retMsg = "로그인 되었습니다.";
		}
		else {
			// 세션 삭제
			session.removeAttribute("USER");
			
			retCode = -1;
			retMsg = "로그인에 실패 하였습니다.";
		}

		// response 생성
		PlatformData out_pData = new PlatformData();
		
		VariableList out_varList = out_pData.getVariableList();
		out_varList.add("ErrorCode", retCode);
		out_varList.add("ErrorMsg" , retMsg);

		HttpPlatformResponse pRes = new HttpPlatformResponse(response, PlatformType.CONTENT_TYPE_XML, "UTF-8");
		pRes.setData(out_pData);
		
		pRes.sendData();
	}

	// 사용자 존재 유무 조회 (서비스 구현)
	private boolean isUser(String id, String pwd) throws Exception {

		boolean result = false;

		Class.forName("org.sqlite.JDBC");
		Connection conn = DriverManager.getConnection("jdbc:sqlite:C:\\sqlite-tools-win32-x86-3280000\\study.db");

		PreparedStatement stat = conn.prepareStatement("SELECT * FROM user WHERE id = ? AND pwd = ?");
		stat.setString(1, id);
		stat.setString(2, pwd);
		
		ResultSet rs = stat.executeQuery();
		while (rs.next()) {
			result = true;
		}
		rs.close();

		return result;
	}

	// 사용자 정보 조회(서비스 구현)
	private HashMap<String, Object> getUser(String id) throws Exception {

		HashMap<String, Object> hashMap = null;

		Class.forName("org.sqlite.JDBC");
		Connection conn = DriverManager.getConnection("jdbc:sqlite:C:\\sqlite-tools-win32-x86-3280000\\study.db");
				
		PreparedStatement stat = conn.prepareStatement("SELECT * FROM user WHERE id = ?");
		stat.setString(1, id);
		
		ResultSet rs = stat.executeQuery();
		while (rs.next()) {
			hashMap = new HashMap<String, Object>();
			hashMap.put("id", rs.getString("id"));
			hashMap.put("name", rs.getString("name"));
			hashMap.put("email", rs.getString("email"));
			break;
		}
		rs.close();
		
		return hashMap;
	}
}

 

 

[넥사크로]

 

1. 화면생성

Static00 - 아이디

Static01 - 비밀번호

Edit00 - 아이디 입력란

Edit01 - 비밀번호 입력란

Button00 - 로그인 버튼

 

2. 스크립트

로그인 버튼 클릭시 /HelloWorld/procLogin.do로 아이디와 비밀번호가 파라미터로 로그인 요청이 됩니다.

this.Button00_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	var id = "";  
	var url = "procLogin.do";
	var reqDs = "";
	var respDs = "";
	var args = "id="+this.Edit00.text + " pwd="+this.Edit01.text;
	var callback = "received";

	this.transaction(id, nexacro.getApplication().CONTEXT + url, reqDs, respDs, args, callback);
};

this.received = function(id, code, message)
{
	if (code == 0) {
		this.alert("SUCESS["+code+"]:"+message);
	} else {
		this.alert("Error["+code+"]:"+message);
	}
}

 

 

[결과화면]