`
riali
  • 浏览: 42439 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

服务器是怎么要求客户端强行弹出身份验证窗口的

阅读更多

我们访问tomcat服务器的时候如果试图访问Tomcat Manager就会发现浏览器弹出一个登陆对话框,和我们平常的网页对话框不同,而且查看页面的时候查不到生成这个对话框的代码,禁止脚本也毫无作用。手头的资料对这个东西没有任何介绍,它到底是怎么弹出来的呢?


用jmeter创建一个http request的sampler,再建一个view result tree的lisenter来看看服务器返回了些什么污七八糟的:

HTTP response headers:
HTTP/1.1 401 Unauthorized
Pragma: No-cache
Cache-Control: no-cache
Expires: Thu, 01 Jan 1970 08:00:00 CST
WWW-Authenticate: Basic realm="Tomcat Manager Application"
Content-Type: text/html;charset=utf-8
Content-Length: 954
Date: Thu, 30 Jun 2005 09:27:26 GMT
Server: Apache-Coyote/1.1


嘿嘿,原来是一个带WWW-Authenticate的401错误啊。自己写个jsp模拟一下看看怎么样:

<%
response.addHeader("WWW-Authenticate","Basic realm=\"Tomcat Manager Application\"");
response.sendError(401,"Unauthorized");
%>

果然,一个一模一样的登陆窗口跳出来了。不过身份验证的具体过程要怎么做呢?google了一下,果然看到好东西了: http://www.chinadata.cn/showContent.asp?projectID=2083



按照说明构造了一个jsp文件:

<%
sun.misc.BASE64Decoderdecoder
=newsun.misc.BASE64Decoder();
booleanauthenticated
=false;
Stringauthorization
=request.getHeader("authorization");
System.
out.println("authorization:"+authorization);
if(authorization!=null){
if(authorization.startsWith("Basic")){
authorization
=authorization.substring(authorization.indexOf('')+1);
byte[]bytes=decoder.decodeBuffer(authorization);
authorization
=newString(bytes);
StringuserName
=authorization.substring(0,authorization.indexOf(':'));
Stringpassword
=authorization.substring(authorization.indexOf(':')+1);
System.
out.println("userName:"+userName);
System.
out.println("password:"+password);
authenticated
=userName.equals("abc")&&password.equals("abc");
}
elseif(authorization.startsWith("Digest")){
StringuserName
=authorization.substring(authorization.indexOf("username="));
userName
=userName.substring("username=\"".length());
userName=userName.substring(0,userName.indexOf('"'));
Stringpassword
=authorization.substring(authorization.indexOf("response="));
password
=password.substring("response=\"".length());
password=password.substring(0,password.indexOf('"'));
authenticated
=userName.equals("abc")&&password.equals("3cf1135d3b8e20dd9272d06288569a56");
}

}

if(!authenticated){
//response.addHeader("WWW-Authenticate","Digestrealm=\"TomcatManagerApplication\"");
response.addHeader("WWW-Authenticate","Basicrealm=\"TomcatManagerApplication\"");
response.sendError(
401,"Unauthorized");
}
else{
out.println("helloabc");
}

%>



cool,和tomcat一模一样的登陆页面做出来了。

用户名密码均为abc,hard code在代码里面了。不过还没查到Digest方式的情况下是对哪些信息进行MD5的

分享到:
评论

相关推荐

    自签署根证书、服务器证书、客户端证书

    在网络安全领域,证书是保障通信安全的关键元素,主要用于身份验证和数据加密。本文将深入探讨“自签署根证书”、“服务器证书”以及“客户端证书”的概念、用途和操作流程。 首先,我们来看“自签署根证书”。根...

    Labview TCP服务器对多客户端程序

    Labview TCP服务器对多客户端程序是一个使用LabVIEW(Laboratory Virtual Instrument Engineering Workbench)开发的交互式应用程序,它展示了如何构建一个TCP服务器来处理多个同时连接的客户端。LabVIEW是美国国家...

    Android 客户端与服务器端进行数据交互Demo(包含服务器端和客户端)

    8. **数据验证**: 在Demo中提到了“验证”功能,这可能包括身份验证(如OAuth、JWT)、数据有效性验证(如JSON Schema)等,确保客户端发送的数据符合服务器的预期。 9. **错误处理**: 客户端需要处理各种可能出现...

    asp.net mvc 弹出窗口 技巧

    8. **数据传递**:如果需要在弹出窗口中展示从服务器获取的数据,可以将数据作为JSON返回,并在客户端使用JavaScript解析并填充到模态窗口中相应的元素。 9. **验证与提交**:在弹出窗口中进行表单输入时,可以利用...

    基于open62541的服务器和客户端

    它提供了完整的堆栈实现,包括身份验证、加密、数据模型和信息模型的定义,以及客户端和服务器之间的通信协议。开发者可以利用这个库轻松地在自己的应用程序中集成OPC UA功能。 3. **服务器和客户端**: 在OPC UA中...

    基于C#的FTP服务器、客户端设计

    FTP服务器的核心职责是接收并响应来自客户端的FTP命令,如LIST(列出目录内容)、RETR(下载文件)和USER/PASS(身份验证)。在C#中,可以使用System.Net.FtpServer库来实现这些功能。首先,我们需要创建一个自定义...

    FTP服务器与客户端程序(c++)

    2. **命令交互**:客户端发送FTP命令,如`USER`、`PASS`进行身份验证,`LIST`获取目录信息,`RETR`下载文件,`STOR`上传文件等。 3. **数据通道管理**:客户端需要管理数据连接,这可能是通过控制连接的命令设置的,...

    oauth2全套(授权服务器+资源服务器+客户端独立版)

    用户在授权服务器上进行身份验证,然后根据用户的授权决定是否向客户端发放访问令牌。 **资源服务器(OAuth Resource Server)** 资源服务器是存储和提供受保护资源的服务器,它接收携带访问令牌的请求,并验证令牌...

    echo服务器和客户端程序

    在IT领域,网络通信是核心部分之一,而“echo服务器和客户端程序”是学习网络编程时常见的基础示例。这个概念通常用于展示TCP或UDP协议的基本工作原理,以及如何实现客户端与服务器之间的数据交换。 首先,我们要...

    TCP服务器端+客户端测试工具

    "TCP服务器端+客户端测试工具"是用于验证和调试TCP通信的一种实用软件,它可以帮助开发者和网络管理员检查TCP连接的正确性,确保数据的完整传输。 首先,我们要理解TCP服务器端的角色。服务器端通常是指运行在特定...

    QT多线程TCP服务器客户端通讯程序

    在QT网络编程中,服务器往往需要和多个客户端保持连接,因此,我在熟悉多线程编程过程中,在TCP服务每接收到一个客户端连接请求,就新建一个线程。客户端也是在新建的线程中维护的。 程序的思路如下: 程序使用了非...

    FTP服务器与客户端设计与实现

    在这个主题中,我们将深入探讨FTP服务器与客户端的设计与实现,包括文件操作、用户权限管理等关键概念。 一、FTP服务器基础 FTP服务器是提供文件传输服务的软件,它接收客户端的连接请求,处理文件的上传、下载以及...

    asp.net弹出窗口并返回值刷新主窗口

    总结来说,ASP.NET实现弹出窗口并返回值刷新主窗口的功能,需要结合客户端的JavaScript、服务器端的ASP.NET技术和页面间通信策略。理解这些概念和技术,能帮助开发者构建更丰富的交互式Web应用。

    C# Socket_服务端向指定的客户端发送消息(包含服务器)

    在本文中,我们将深入探讨如何使用C#的Socket编程来实现一个简单的聊天应用程序,其中包含服务器和客户端的交互。...通过学习和实践这些概念,你可以创建出自己的网络应用程序,实现服务器与客户端之间的高效通信。

    ASP.net GridView双击事件,弹出一个窗口显示详细信息

    本主题将深入探讨如何利用ASP.NET GridView的双击事件来实现用户双击某行时,弹出一个窗口显示该行的详细信息。 首先,我们需要在ASP.NET页面上添加一个GridView控件,并将其与数据源(如SqlDataSource或...

    vc做的局域网聊天系统,包含服务器客户端,文件传输,发送窗口抖动

    这是一个基于VC++开发的局域网聊天系统,涵盖了多个关键功能点,包括服务器与客户端通信、文件传输、系统托盘操作以及窗口抖动通知。下面将详细解释这些知识点。 1. **VC++**:VC++是Microsoft开发的一种编程环境,...

    Qt:Tcp服务器与客户端程序

    本项目“Qt:Tcp服务器与客户端程序”聚焦于利用Qt库来实现TCP(传输控制协议)通信。TCP是一种面向连接的、可靠的网络通信协议,它确保数据的正确排序和无丢失传输。 在描述中提到,该程序能够“建立TCP服务器后,...

    STM32单片机作TCP服务器,实现PC多客户端连接Demo

    在这个项目中,STM32F750开发板被用来创建一个能同时处理多个PC客户端连接的TCP服务器。下面我们将详细探讨这个Demo中的关键技术点。 首先,STM32F750是一款高性能的微控制器,基于ARM Cortex-M7内核,具有丰富的...

    实现了弹出窗口后背景变灰并屏蔽

    对话框是一种特殊的窗口,它从主应用窗口中弹出,要求用户提供信息或进行某种交互。在网页中,我们通常通过JavaScript库,如jQuery UI或Bootstrap来创建模态对话框。 1. **jQuery UI Dialog**:jQuery UI提供了方便...

Global site tag (gtag.js) - Google Analytics