Android 개발 로그인 인증

최근에 작은 프로젝트를 하나 했는데 프로젝트 개발에서 로그인 검증 기능을 실현해야 한다. 구체적인 요구는 안드로이드에서 사용자 이름과 비밀번호를 입력하고 서버에서 MySQL 데이터베이스에 이 사용자가 있는지 확인하는 것이다. 실현하기 전에 당연히 가장 중요한 것은 안드로이드 측의 데이터를 서버에 어떻게 보내는지 구체적인 실현 방법이다.
서버: ManageServlet.java
public class ManageServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		String name = request.getParameter("name");
		String password = request.getParameter("password");
		System.out.println("   :"+name+"    :"+password);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

	}

}

여기서 실현된 것은 단지 사용자 측의 데이터를 컨트롤러에 출력하는 것일 뿐이다. jsp 개발의 신을 배웠기 때문에 나머지 데이터 검증은 말할 것도 없고 여기서 더 이상 군말하지 않을 것이다.
다음은 안드로이드 끝입니다.
주 activity:MainActivity.java
public class MainActivity extends Activity {
	
	private  EditText textname = null;
	private  EditText textpassword = null;
	private  Button button = null;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		textname = (EditText)findViewById(R.id.name);
		textpassword = (EditText)findViewById(R.id.password);
		button = (Button)findViewById(R.id.button);
		
		button.setOnClickListener(new mybuttonlistener());
		
	}
	
	class mybuttonlistener implements OnClickListener{
		
		boolean result=false;
		String name;
		String password;
		
		public void onClick(View v) {

			try {				
				name = textname.getText().toString();
				name = new String(name.getBytes("ISO8859-1"), "UTF-8");
				password = textpassword.getText().toString();
				password = new String(password.getBytes("ISO8859-1"), "UTF-8");
			} catch (UnsupportedEncodingException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			
			
			try {
				result = NewsService.save(name,password);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			if(result){
				Toast.makeText(MainActivity.this, R.string.ok, Toast.LENGTH_SHORT).show();
			}else{
				Toast.makeText(MainActivity.this, R.string.error, Toast.LENGTH_SHORT).show();
			}
			
		}
		
	}
	
}

레이아웃 파일:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}" 
    >
	<LinearLayout 
	    android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
	    >
	    <TextView
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:text="@string/name" />
	   	<EditText 
	   	    android:id="@+id/name"
	   	    android:layout_width="fill_parent"
	   	    android:layout_height="wrap_content"
	   	    android:hint="@string/playname"
	   	    android:singleLine="true"
	   	    />
	   	<TextView
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:text="@string/password" />
	   	<EditText 
	   	    android:id="@+id/password"
	   	    android:layout_width="fill_parent"
	   	    android:layout_height="wrap_content"
	   	    android:password="true"
	   	    android:hint="@string/playpass"
	   	    android:singleLine="true"
	   	    />
	   	<Button 
	   	    android:id="@+id/button"
	   	    android:layout_width="fill_parent"
	        android:layout_height="wrap_content"
	        android:onClick=""
	        android:text="@string/submit"
	   	    />
   	</LinearLayout>
</RelativeLayout>

서버 측에 데이터를 보내는 서비스(News Service):
public class NewsService {

	/**
	 *     
	 * @param name    
	 * @param password    
	 * @return
	 */
	
	public static boolean save(String name, String password){
		
		String path = "http://192.168.1.104:8080/Register/ManageServlet";  
		
		Map<String, String> student = new HashMap<String, String>();
		student.put("name", name);
		student.put("password", password);
		
		try {
			return SendGETRequest(path, student, "UTF-8");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return false;
		
	}
	
	/**
	 *   GET  
	 * @param path       
	 * @param student       
	 * @return        
	 * @throws Exception
	 */

	private static boolean SendGETRequest(String path, Map<String, String> student, String ecoding) throws Exception{
		
		// http://127.0.0.1:8080/Register/ManageServlet?name=1233&password=abc
		
		StringBuilder url = new StringBuilder(path);
		url.append("?");
		for(Map.Entry<String, String> map : student.entrySet()){
			url.append(map.getKey()).append("=");
			url.append(URLEncoder.encode(map.getValue(), ecoding));
			url.append("&");
		}
		
		url.deleteCharAt(url.length()-1);
		System.out.println(url);
		HttpsURLConnection conn = (HttpsURLConnection)new URL(url.toString()).openConnection();
		conn.setConnectTimeout(100000);
		conn.setRequestMethod("GET");
		if(conn.getResponseCode() == 200){
			return true;
		}
		return false;
	}

}

빨간색은 자기 컴퓨터의 IP 주소다. 
네트워크에 연결해야 하기 때문에 안드로이드 매니페스트에 있어야 합니다.xml 네트워크 권한 설정:
 <uses-permission android:name="android.permission.INTERNET"/>

여기에 안드로이드를 기본적으로 서버에 전송하여 공유를 마쳤습니다. 잘못된 점이 있으면 바로잡아 주십시오.

좋은 웹페이지 즐겨찾기