ntlm java 您所在的位置:网站首页 十三水牌型介绍 ntlm java

ntlm java

2023-08-26 09:06| 来源: 网络整理| 查看: 265

我正在使用以下过滤器在我的Web应用程序中启用NTLM身份验证。

我得到Windows浏览器身份验证提示。运行正常。除了以下事实外- 我无法确定身份验证是成功还是失败! * 两种情况均无错误。

*在每种情况下都将打印用户名(正确或相反),工作站等。

package com.test;

import java.io.IOException;

import java.io.PrintStream;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import jcifs.ntlmssp.Type3Message;

import com.sun.xml.internal.ws.util.StringUtils;

import sun.misc.BASE64Decoder;

import sun.misc.BASE64Encoder;

public class NTLMUserFilter implements Filter {

private FilterConfig filterConfig = null;

private String userDomain = null;

public void init(FilterConfig filterConfig) throws ServletException {

this.filterConfig = filterConfig;

}

public void doFilter(ServletRequest req, ServletResponse res,

FilterChain chain) {

HttpServletRequest request = (HttpServletRequest) req;

HttpServletResponse response = (HttpServletResponse) res;

String username = null;

//first, get the user agent

String useragent = request.getHeader("user-agent");

//if you're using IE, you can continue

if ((useragent.indexOf("MSIE") > -1)){

//Always do the ntlm check (for IE POST back)

try{

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

if (auth == null)

{

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

response.setStatus(response.SC_UNAUTHORIZED);

response.setContentLength(0) ;

response.flushBuffer();

return;

}

if (auth.startsWith("NTLM "))

{

byte[] msg = new sun.misc.BASE64Decoder().decodeBuffer(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};

response.setHeader("WWW-Authenticate", "NTLM " + new sun.misc.BASE64Encoder().encodeBuffer(msg1));

response.setStatus(response.SC_UNAUTHORIZED);

response.setContentLength(0) ;

response.flushBuffer();

return;

}

else if (msg[8] == 3)

{

//Did Authentication Succeed? All this is always printed.

Type3Message type3 = new Type3Message(msg);

System.out.println("osUser: " + type3.getUser());

System.out.println("osRemoteHost: + " + type3.getWorkstation());

System.out.println("osDomain: " + type3.getDomain());

}

}

}catch(Exception e){

System.out.println(e) ;

}

//System.out.println("Suc);

}

try {

chain.doFilter(req, res);

} catch (IOException e) {

System.out.println(e);

} catch (ServletException e) {

System.out.println(e);

}

}

public void destroy()

{

this.filterConfig = null;

}

}

web.xml很简单:

ntlmFilter

com.test.NTLMUserFilter

ntlmFilter

/*



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有