java实现ntlm的简单介绍
今天给各位分享java实现ntlm的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、Java编程之jdk1.4,jdk1.5和jdk1.6的区别分析
- 2、java web 工程如何实现 域登录,即判断当前访问用户在域中,就直接登录进去,不用用户名密码。
- 3、浏览器 NTLM认证实现
- 4、java中jtds数据库怎么用
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的信息别忘了在本站进行查找喔。
发布于:2022-11-26,除非注明,否则均为
原创文章,转载请注明出处。