Java 6 SE 里的DigestAuthentication[1]

原创 2007年09月23日 12:55:00


Java 6 SE 里的DigestAuthentication[1]

Author:zfive5
Email:zfive5@yahoo.com.cn

两三年前,看过一阵子java,同时也分析过java sdk的源码,当时为什么看jdbc是怎样实现的,今天在csdn看到什么13篇文章,看到java 6 SE支持ntlm

 

同是也看到了Digest,一下子兴趣就来,马上到sun的网站download一个jdk 6 se的代码. java的大部分代码都是java,还有很少一部分是c写的(这部分主要是和平台有关的)

 

命令行下运行:

 

C:/>java -jar C:/jdk-6u2-fcs-src-b05-jrl-22_jun_2007.jar

 

根据提示指定解压目录就可以.

 

WindowsNTLM下居然用的是msdll,如下:

 

    OSVERSIONINFO   version;

    UCHAR libName[MAX_PATH];

 

    ntlm_ctxHandleID = (*env)->GetFieldID(env, clazz, "ctxHandle", "J");

    ntlm_crdHandleID = (*env)->GetFieldID(env, clazz, "crdHandle", "J");

 

    version.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);

    GetVersionEx (&version);

 

    if (version.dwPlatformId == VER_PLATFORM_WIN32_NT) {

       strcpy (libName, "security.dll" );

    }

    else if (version.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {

       strcpy (libName, "secur32.dll" );

    }

 

    lib = LoadLibrary (libName);

 

    pFreeCredentialsHandle

       = (FREE_CREDENTIALS_HANDLE_FN) GetProcAddress(

       lib, "FreeCredentialsHandle" );

 

    pAcquireCredentialsHandle

       = (ACQUIRE_CREDENTIALS_HANDLE_FN) GetProcAddress(

       lib, "AcquireCredentialsHandleA" );

 

    pFreeContextBuffer

       = (FREE_CONTEXT_BUFFER_FN) GetProcAddress(

       lib, "FreeContextBuffer" );

 

    pInitializeSecurityContext

       = (INITIALIZE_SECURITY_CONTEXT_FN) GetProcAddress(

       lib, "InitializeSecurityContextA" );

 

    pCompleteAuthToken

       = (COMPLETE_AUTH_TOKEN_FN) GetProcAddress(

       lib, "CompleteAuthToken" );

 

    pDeleteSecurityContext

       = (DELETE_SECURITY_CONTEXT_FN) GetProcAddress(

       lib, "DeleteSecurityContext" );

 

这样的实现写法的确可以节省代码和时间,但自己一步步的实现绝对不是没有必要. solaris下的实现就完全是java写的.

 

下面的注释才可以了解一下http认证原理:

 

/**

     * Returns the String that should be included in the HTTP

     * <B>Authorization</B> field.  Return null if no info was

     * supplied or could be found.

     * <P>

     * Example:

     * --> GET http://www.authorization-required.com/ HTTP/1.0

     * <-- HTTP/1.0 403 Unauthorized

     * <-- WWW-Authenticate: Basic realm="WallyWorld"

     * call schemeSupported("Basic"); (return true)

     * call authString(u, "Basic", "WallyWorld", null);

     *   return "QWadhgWERghghWERfdfQ=="

     * --> GET http://www.authorization-required.com/ HTTP/1.0

     * --> Authorization: Basic QWadhgWERghghWERfdfQ==

     * <-- HTTP/1.0 200 OK

     * <B> YAY!!!</B>

     */

 

其实这次重点不是以上而是DigestAuthentication

现在首先用pd12分析一下类结构,如下:

 

http://p.blog.csdn.net/images/p_blog_csdn_net/zfive5/72680/o_zfive5java.jpg

 

 

待续….

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Java SE Development Kit 6u26 Part1

  • 2011-08-16 22:22
  • 15.00MB
  • 下载

JAVA_SE基础——6.标识符&关键字

一、标识符 标识符是指可被用来为类、变量或方法等命名的字符序列,换言之,标识符就是用户自定义的名称来标识类、变量或方法等。更简单的说,标识符就是一个名字。标识符的选择并不是任意的,Java语言规定标...

Java SE Development Kit 6u26 Part1

  • 2011-08-16 22:10
  • 15.00MB
  • 下载

Java SE 6 新特性: JMX 与系统管理

前言 在 Java 程序的运行过程中,对 JVM 和系统的监测一直是 Java 开发人员在开发过程所需要的。一直以来,Java 开发人员必须通过一些底层的 JVM API,比如 JVMPI 和 ...

Java SE 6 中实现 Cookie 功能

头一段时间,为了在 Java 中实现 Cookie 的功能,看了若干规范文档,写了大量的代码,才勉强将其搞定。今天看到文章才知道 Java SE 6 中为了实现 Cookie 功能,提供了若干现成的类...

体验Java SE 6 中的 GroupLayout

转自:  http://www.blogjava.net/esls2008/archive/2006/12/18/88548.html   它将组件按层次分组,以决定它们在 Container...

J2SE学习笔记3 — Java基本语法(6)基本输入输出

基本输入输出流,Scanner类,Console类,格式化输入输出,日期输出格式,文件输入输出
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)