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

 

 

待续….

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

Mac OS 您需要安装旧 Java SE 6 运行环境才能打开“XXX” 问题

Mac OS 您需要安装旧 Java SE 6 运行环境才能打开“XXX” 问题问题描述:今天在Mac OS上安装一个app的时候提示 “您需要安装旧 Java SE 6 运行环境才能打开 XXX” ...
  • kongxx
  • kongxx
  • 2016年03月24日 09:52
  • 41807

update Yosemite ,prompt " * you need to install the legacy Java SE 6 Runtime"

解决方案: 我是安装的是jdk1.8.45,打开Charles提示“To open Charles you need to install the legacy Java SE 6 Runtim...
  • rwdxll
  • rwdxll
  • 2015年05月29日 09:42
  • 1499

JDK 6(JAVA SE 6)

6.0出来了,JAVA爱好者,大家在这里庆祝一下.哈哈. 
  • it_man
  • it_man
  • 2007年01月16日 15:58
  • 1239

Eclipse OS X Yosemite 提示– To open“Eclipse” you need to install the legacy Java SE 6 runtime的解决办法

最近我将笔记本更换成了Macbook Pro,它默认自带的系统是OS X Yosemite 10.10.1。安装了JDK 1.8之后,我的Android IDE(Eclipse and Android...
  • github_32521685
  • github_32521685
  • 2015年12月06日 16:45
  • 1596

Mac 显示需要安装旧Java SE 6运行环境才能打开"XXX"

问题描述: 今天在Mac OS上安装一个app的时候提示 “您需要安装旧 Java SE 6 运行环境才能打开 XXX” . 解决办法 从下面的链接下载javaforosx.dmg并...
  • u012000060
  • u012000060
  • 2016年11月19日 17:27
  • 1329

mac 您需要安装旧 Java SE 6 运行环境才能打开Android Studio,Intellij IDEA

Intellij IDEA和Android Studio默认使用JDK6,所以你有如下选择: 1,安装JDK6 2,安装其他版本的JDK,然后修改IDE的指向。 如果选择2,那么修改方式为: ...
  • Bill_Ming
  • Bill_Ming
  • 2015年10月07日 14:53
  • 1800

Mac 10.11 java se6 不兼容问题

本帖最后由 赵艾安 于 2015-7-3 18:50 编辑  不少朋友问下题何解,终于,撸主找到了解题方法~此文来自国外大神,点击传送门可前去瞻仰。 This application ...
  • iamfreedom2011
  • iamfreedom2011
  • 2015年10月12日 22:42
  • 1492

mac 下安装myeclipse 提示需要安装旧Java SE 6运行环境才能打开

以上是提示,然后网上查了下,是mac系统的原因,下载个补丁差不多就可以继续安装了。 补丁下载地址:https://support.apple.com/kb/DL1572?viewlocale=zh_...
  • robinson_911
  • robinson_911
  • 2016年11月06日 13:20
  • 2000

您需要安装旧 Java SE 6 运行环境才能打开“eclipse”解决

升级mac系统后,打开eclipse突然提示“您需要安装旧 Java SE 6 运行环境才能打开eclipse” 解决方法: 去苹果官网下载适合该系统的jdk版本 https://s...
  • ctree2014
  • ctree2014
  • 2016年07月29日 10:46
  • 1037

Mac OS 您需要安装旧 Java SE 6 Runtime运行环境才能打开“XXX” 问题

Mac OS 您需要安装旧 Java SE 6 Runtime运行环境才能打开“XXX” 问题 问题描述: 今天在Mac OS上安装一个app的时候提示 “您需要安装旧 Java SE 6 运行环境...
  • u013007305
  • u013007305
  • 2017年05月06日 12:05
  • 1087
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java 6 SE 里的DigestAuthentication[1]
举报原因:
原因补充:

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