zoukankan      html  css  js  c++  java
  • Android与IIS身份验证——基本验证

     内容摘要

      前言

      1.服务器端

      2.Android客户端

      3.IIS部署

      4.运行效果

      在Android移动项目开发中,访问服务器时,为了简洁方便,我们经常使用http协议来传递JSON格式的数据。然而有些项目需要有一定的安全性,如使用Android客户端登陆到MIS系统。虽然我们是通过Android手机客户端的登陆Activity中登陆到系统的,但是略懂电脑的黑客是能够跳过登陆Activity,从而直接进入系统的。这样,会造成一些由于系统的不安全所带来的麻烦。建立一种防止黑客强行登录的身份验证模式尤为重要。此时,系统的身份验证成为阻挡黑客登陆的一道屏障。那么,怎样实现一个身份验证呢?让我们以IIS为宿主,一步一步的实现身份验证吧。

      一、ASP.NET服务器端

      首先,我们使用VS2010创建一个web项目(可以是WebForms,也可以是MVC,我这里使用的是ASP.NET MVC项目)。图1.1所示

    图1.1

      然后,在HomeController的Index Action中输入:登陆成功。

        [HandleError]
        
    public class HomeController : Controller
        {
            
    public ActionResult Index()
            {
                
    return Content("登陆成功");
            }
        }

       二、Android客户端

      首先,创建一个Android项目,并新建一个MainActivity类。

      接着,编写一个访问IIS服务器的类。

    package ld.com.authorize;

    import java.io.BufferedReader;
    import java.io.InputStreamReader;

    import org.apache.http.HttpResponse;
    import org.apache.http.auth.AuthScope;
    import org.apache.http.auth.UsernamePasswordCredentials;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.BasicCredentialsProvider;
    import org.apache.http.impl.client.DefaultHttpClient;

    import android.util.Log;

    public abstract class HttpHelper {

        
    private final static String TAG = "HttpHelper";

        
    public static String invoke() {
            String result 
    = null;
            
    try {
                 
    final String url = "http://192.168.1.104:180/";

                HttpPost httpPost 
    = new HttpPost(url);
                DefaultHttpClient httpClient 
    = new DefaultHttpClient();

                
    //基本身份验证
                BasicCredentialsProvider bcp = new BasicCredentialsProvider();
                String userName 
    = "liudong";
                String password 
    = "123";
                bcp.setCredentials(AuthScope.ANY, 
    new UsernamePasswordCredentials(
                        userName, password));
                httpClient.setCredentialsProvider(bcp);

                HttpResponse httpResponse 
    = httpClient.execute(httpPost);

                StringBuilder builder 
    = new StringBuilder();
                BufferedReader reader 
    = new BufferedReader(new InputStreamReader(
                        httpResponse.getEntity().getContent()));
                
    for (String s = reader.readLine(); s != null; s = reader.readLine()) {
                    builder.append(s);
                }
                result 
    = builder.toString();
                Log.d(TAG, 
    "result is ( " + result + " )");
            } 
    catch (Exception e) {
                Log.e(TAG, e.toString());
            }
            Log.d(TAG, 
    "over");
            
    return result;
        }
    }

      注意的是,我这里用户名和密码分别是:liudong和123。

      然后,修改layout文件:main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation
    ="vertical" android:layout_width="fill_parent"
        android:layout_height
    ="fill_parent">
        
    <TextView android:layout_width="fill_parent"
            android:layout_height
    ="wrap_content" android:text="@string/hello" />
        
    <Button android:text="身份码验证" android:id="@+id/btnPassword"
            android:layout_width
    ="fill_parent" android:layout_height="wrap_content"></Button>
    </LinearLayout>

      最后,修改MainActivity。

    package ld.com.authorize;

    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;

    public class MainActivity extends Activity {

        
    private final String TAG = this.getClass().getSimpleName();

        
    private Button btnPassword;

        
    /** Called when the activity is first created. */
        @Override
        
    public void onCreate(Bundle savedInstanceState) {
            
    super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            btnPassword 
    = (Button) this.findViewById(R.id.btnPassword);

            setInvokeOnClick();
        }

        
    private void setInvokeOnClick() {
            btnPassword.setOnClickListener(
    new OnClickListener() {

                @Override
                
    public void onClick(View v) {
                    
    // TODO Auto-generated method stub
                    AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() {

                        
    private ProgressDialog progressDialog;

                        @Override
                        
    protected void onPostExecute(String result) {
                            
    // TODO Auto-generated method stub
                            
    // super.onPostExecute(result);
                            progressDialog.cancel();
                            Toast.makeText(MainActivity.
    this, result,
                                    Toast.LENGTH_SHORT).show();

                            Log.d(TAG, result);
                        }

                        @Override
                        
    protected void onPreExecute() {
                            
    // TODO Auto-generated method stub
                            super.onPreExecute();
                            progressDialog 
    = new ProgressDialog(MainActivity.this);
                            progressDialog
                                    .setProgressStyle(ProgressDialog.STYLE_SPINNER);
                            progressDialog.setTitle(
    "调用中,请稍后...");
                            progressDialog.show();
                        }

                        @Override
                        
    protected String doInBackground(Void... arg0) {
                            
    // TODO Auto-generated method stub
                            try {
                                
    return HttpHelper.invoke();
                            } 
    catch (Exception e) {
                                
    return null;
                            }
                        }

                    };
                    task.execute();
                }
            });
        }
    }

      设置访问权限为:<uses-permission android:name="android.permission.INTERNET" />

      运行模拟器的效果如图2.1所示。

    图2.1

      三、IIS部署

      首先、添加一个网站,如图3.1所示。

    如图3.1

      接着,在进入计算机管理-->本地用户和组-->用户,新建一个用户,如图3.2所示。

    图3.2

      然后,设置IIS的身份验证(图3.3所示)。

    图3.3

      设置其身份验证模式为:基本验证或Window身份s验证(图3.4所示)。

    图3.4

      最后,我们在浏览器中输入网址进行验证,验证结果见图3.5和图3.6。

    图3.5

    图3.6

      从图中我们可以发现,浏览该网页时需要用户名和密码。我们输入了正确的用户名和密码后就可以登录这个页面了。

      四,运行效果。

      见图4.1和图4.2所示。

    图4.1

    图4.2

      代码下载

      出处:http://www.cnblogs.com/GoodHelper/archive/2011/08/17/android_iis_01.html

      作者:刘冬.NET

      欢迎转载,但须保留版权。

  • 相关阅读:
    RoIPooling、RoIAlign笔记
    ROI Align 的基本原理和实现细节
    ROI Align详解
    GIT总结
    java-变量,函数 下
    linux设置静态ip地址
    技术参考网站-网址
    python
    python
    python
  • 原文地址:https://www.cnblogs.com/GoodHelper/p/android_iis_01.html
Copyright © 2011-2022 走看看