java实现ntlm的简单介绍

博主:adminadmin 2022-11-26 11:47:05 77

今天给各位分享java实现ntlm的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Java编程之jdk1.4,jdk1.5和jdk1.6的区别分析

jdk6和jdk5相比的新特性有:

1、instrumentation

Java

SE

6

里面,instrumentation

包被赋予了更强大的功能:启动后的

instrument、本地代码

instrument,以及动态改变

classpath

等等。

2、Http有所增强

3、

Java

管理扩展(JMX)

架构及其框架,以及在

Java

SE

5

中新引入的

JMX

API

--

java.lang.management

4、JDK

6

中新增加编译器

API(JSR

199)。利用此

API,您可以在运行时调用

Java

编译器,可以编译不同形式的源代码文件,还可以采集编译器的诊断信息。

5、Java

DB

JDBC

4.0

6、对脚本语言的支持

Java

SE

6

新引入的对

JSR

223

的支持,它旨在定义一个统一的规范,使得

Java

应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在

Java

平台上调用各种脚本语言的目的。

7、XML

API

Web

服务

Java

SE

6

中提供的

XML

处理框架,以及在此框架之上结合注释(Annotation)

技术,所提供的强大的针对

Web

服务的支持

要详细的可以参看:

查看文章

请问

jdk

1.5

和jdk1.6有哪些区别???2008年11月27日

星期四

下午

09:52

多了不少新特性

一.Instrumentation

利用

Java

代码,即

java.lang.instrument

做动态

Instrumentation

Java

SE

5

的新特性,它把

Java

instrument

功能从本地代码中解放出来,使之可以用

Java

代码的方式解决问题。在

Java

SE

6

里面,instrumentation

包被赋予了更强大的功能:启动后的

instrument、本地代码(native

code)instrument,以及动态改变

classpath

等等。在

Java

SE

5

当中,开发者只能在

premain

当中施展想象力,所作的

Instrumentation

也仅限与

main

函数执行前,这样的方式存在一定的局限性。在

Java

SE

6

Instrumentation

当中,有一个跟

premain“并驾齐驱”的“agentmain”方法,可以在

main

函数开始运行之后再运行。

二、Http

Java

SE

6

当中,围绕着

HTTP

协议出现了很多实用的新特性:NTLM

认证提供了一种

Window

平台下较为安全的认证机制;JDK

当中提供了一个轻量级的

HTTP

服务器;提供了较为完善的

HTTP

Cookie

管理功能;更为实用的

NetworkInterface;DNS

域名的国际化支持等等。

HTTP

Cookie管理可以应用客户操作临时变量的保存,如查询条件,当前状态等

三、JMX与系统管理

管理系统的构架

1.

管理系统构架

上图分析了管理系统的基本构架模式。其中

Agent

/

SubAgent

起到的就是翻译的作用:把

IT

资源报告的消息以管理系统能理解的方式传送出去。

也许读者有会问,为什么需要

Agent

SubAgent

两层体系呢?这里有两个现实的原因:

管理系统一般是一个中央控制的控制软件,而

SubAgent

直接监控一些资源,往往和这些资源分布在同一物理位置。当这些

SubAgent

把状态信息传输到管理系统或者传达管理系统的控制指令的时候,需要提供一些网络传输的功能。

管理系统的消息是有一定规范的,消息的翻译本身是件复杂而枯燥的事情。

一般来说,管理系统会将同一物理分布或者功能类似的

SubAgent

分组成一组,由一个共用的

Agent

加以管理。在这个

Agent

里封装了

1

2

的功能。

JMX

和管理系统

JMX

既是

Java

管理系统的一个标准,一个规范,也是一个接口,一个框架。图

2

展示了

JMX

的基本架构。

2.

JMX

构架

和其它的资源系统一样,JMX

是管理系统和资源之间的一个接口,它定义了管理系统和资源之间交互的标准。javax.management.MBeanServer

实现了

Agent

的功能,以标准的方式给出了管理系统访问

JMX

框架的接口。而

javax.management.MBeans

实现了

SubAgent

的功能,以标准的方式给出了

JMX

框架访问资源的接口。而从类库的层次上看,JMX

包括了核心类库

java.lang.management

javax.management

包。java.lang.management

包提供了基本的

VM

监控功能,而

javax.management

包则向用户提供了扩展功能。

JMX帮助开发者监控JVM的信息

四、编辑器API

JDK

6

提供了在运行时调用编译器的

API。在传统的

JSP

技术中,服务器处理

JSP

通常需要进行下面

6

个步骤:

分析

JSP

代码;

生成

Java

代码;

Java

代码写入存储器;

启动另外一个进程并运行编译器编译

Java

代码;

将类文件写入存储器;

服务器读入类文件并运行;

但如果采用运行时编译,可以同时简化步骤

4

5,节约新进程的开销和写入存储器的输出开销,提高系统效率。实际上,在

JDK

5

中,Sun

也提供了调用编译器的编程接口。然而不同的是,老版本的编程接口并不是标准

API

的一部分,而是作为

Sun

的专有实现提供的,而新版则带来了标准化的优点。

API

的第二个新特性是可以编译抽象文件,理论上是任何形式的对象

——

只要该对象实现了特定的接口。有了这个特性,上述例子中的步骤

3

也可以省略。整个

JSP

的编译运行在一个进程中完成,同时消除额外的输入输出操作。

第三个新特性是可以收集编译时的诊断信息。作为对前两个新特性的补充,它可以使开发人员轻松的输出必要的编译错误或者是警告信息,从而省去了很多重定向的麻烦

五、Java

DB

与jdbc4.0

新安装了

JDK

6

的程序员们也许会发现,除了传统的

bin、jre

等目录,JDK

6

新增了一个名为

db

的目录。这便是

Java

6

的新成员:Java

DB。这是一个纯

Java

实现、开源的数据库管理系统(DBMS),源于

Apache

软件基金会(ASF)名下的项目

Derby。

Java

6

开始,应用程序不再需要显式地加载驱动程序了,DriverManager

开始能够自动地承担这项任务。

六、对脚本语言的支持

Java

SE

6

引入了对

Java

Specification

Request(JSR)223

的支持,JSR

223

旨在定义一个统一的规范,使得

Java

应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在

Java

平台上调用各种脚本语言的目的。

Java

脚本

API

为开发者提供了如下功能:

获取脚本程序输入,通过脚本引擎运行脚本并返回运行结果,这是最核心的接口。

发现脚本引擎,查询脚本引擎信息。

通过脚本引擎的运行上下文在脚本和

Java

平台间交换数据。

通过

Java

应用程序调用脚本函数。

七、XML

API

Web

服务

java web 工程如何实现 域登录,即判断当前访问用户在域中,就直接登录进去,不用用户名密码。

AD域登陆请求会有几次信息交互过程,这个你可以查询一下NTLM的协议。

第一次服务器返回401时会弹出要求输入域名和密码的对话框,这个时候你应该从系统中自动取得域名和账号名,然后跳过第一次响应的401,将域账号传给AD服务器进行验证。直到AD服务器验证通过后,返回登录成功的结果给client端。

相关的资料你可以查一下:NTLM (NTLM v2会不同,vista和win7之后的系统)

至于代码的逻辑修改,就需要你自己完成了。

现有的java方式使用NTLMv2的,还没有支持http的。

浏览器 NTLM认证实现

String doNTLM(RequestContext ctx ){

HttpServletRequest request = ctx.getRequest();

  HttpServletResponse rep = ctx.getResponse();

  String auth = request.getHeader("Authorization");

  String logid="";

  if (null == auth){

rep.setStatus(rep.SC_UNAUTHORIZED);

      rep.setHeader("WWW-Authenticate", "NTLM");

      return logid;

  }

if (auth.startsWith("NTLM ")){

byte[] msg;

      try {

//msg = new sun.misc.BASE64Decoder().decodeBuffer(auth.substring(5));

        msg = java.util.Base64.getDecoder().decode(auth.substring(5));

        int off =0, length, offset;

        if (msg[8] ==1){

byte z =0;

            byte[] msg1 = {(byte)'N', (byte)'T', (byte)'L', (byte)'M', (byte)'S', (byte)'S', (byte)'P',

                  z,(byte)2, z, z, z, z, z, z, z,(byte)40, z, z, z,

                  (byte)1, (byte)130, z, z,z, (byte)2, (byte)2,

                  (byte)2, z, z, z, z, z, z, z, z, z, z, z, z};

            rep.setHeader("WWW-Authenticate", "NTLM " +

new sun.misc.BASE64Encoder().encodeBuffer(msg1));

            rep.sendError(rep.SC_UNAUTHORIZED);

            return "";

        }else if (msg[8] ==3){

off =30;

            length = msg[off+17]*256 + msg[off+16];

            offset = msg[off+19]*256 + msg[off+18];

            String remoteHost =null;

            try {

remoteHost =new String(msg, offset, length);

            }catch (Exception e) {

e.printStackTrace();

              remoteHost="";

            }

length = msg[off+1]*256 + msg[off];

            offset = msg[off+3]*256 + msg[off+2];

            String domain =null;

            try {

domain =new String(msg, offset, length);

            }catch (Exception e) {

e.printStackTrace();

              domain ="";

            }

length = msg[off+9]*256 + msg[off+8];

            offset = msg[off+11]*256 + msg[off+10];

            String username =new String(msg, offset, length);

            String host;

            String doma;

            if(username.length()3){

logid = username.replace(username.substring(1, 2), "");

              log.info("Username:"+logid);

            }

if(remoteHost.length()3){

host = remoteHost.replace(remoteHost.substring(1, 2), "");

              log.info("RemoteHost:"+host);

            }

if(domain.length()3){

doma = domain.replace(domain.substring(1, 2), "");

              log.info("Domain:"+doma);

            }

return logid;

        }

}catch (IOException e) {

log.error("访问域失败: " + e.getMessage());

        return logid;

      }

}

return logid;

}

java中jtds数据库怎么用

新建一个Java Project ,然后导入需要添加的架包,步骤如下:

1、网上下载jtds-1.3.1-dist.zip并解压;

2、选择新建的项目,新建一个文件夹,将jtds-1.3.1.jar复制到文件夹里面,同时,如果电脑是64位,将x64文件夹复制到文件夹中,如果电脑是32位,将x86文件夹复制到文件夹中;

3、选择新建的项目,右键——》Build Path ——》Add to Build Path;

4、为项目添加ntlmauth.dll:选择新建的项目,右键——》Build Path ——》Configure Build Path,然后选择Libraries,

java实现ntlm的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、java实现ntlm的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-26,除非注明,否则均为首码项目网原创文章,转载请注明出处。