`
riali
  • 浏览: 41644 次
  • 性别: 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的

分享到:
评论

相关推荐

    基于服务器实现客户端与客户端之间会话

    编写一个客户端程序,一个服务器程序。服务器先开启,客户端登录,在登录时将自己在聊天是的监听端口发送给服务器,服务器保存该客户端的监听端口及ip地址。...此时客户端弹出聊天界面即可与好友聊天。

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

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

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

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

    Qt实现客户端/服务器端登录验证.数据传输使用md5加密

    在本文中,我们将深入探讨如何使用Qt框架实现一个基于客户端/服务器端的登录验证系统,其中数据传输使用MD5加密,以及与MySQL数据库的交互。首先,我们要理解C/S架构,即客户端-服务器架构,它是分布式应用的基础,...

    cs模式聊天服务器和客户端

    客户端可能还需要实现身份验证、加密通信等功能以保证安全。 其次,服务器端的设计更为复杂,它需要管理多个连接的客户端,同时处理来自它们的并发请求。服务器通常会有一个监听线程,等待新的客户端连接。一旦连接...

    c++ websocket服务器和html客户端

    WebSocket服务器的主要任务是接收来自客户端的连接请求,验证握手过程,维持连接状态,并处理从客户端接收到的数据,同时将响应发送回客户端。 - **Websocket.sln**: 这是Visual Studio的解决方案文件,包含了项目...

    Android服务器端与客户端的数据交互

    在Android应用开发中,服务器端与客户端的数据交互是至关重要的环节,这涉及到用户信息的验证、数据的获取和存储等多个方面。在这个过程中,通常会采用HTTP或HTTPS协议进行通信,利用JSON或XML等数据格式传输数据。...

    全志OTA客户端服务器端完整文档以及服务器端 客户端源代码(按文档操作验证可以使用)

    提供的服务器端源代码是实现OTA服务的关键部分,它负责处理客户端的请求,验证设备身份,分发固件包,记录更新日志等。理解并能修改这些源代码可以帮助开发者定制化自己的OTA服务。 5. **客户端源码**: 客户端源...

    delphi实现QQ弹出窗口

    在本文中,我们将深入探讨如何使用Delphi编程语言来实现QQ弹出窗口的功能。Delphi是一种基于Object Pascal的集成开发环境(IDE),它提供了一套强大的工具和组件库,使得开发者能够快速创建Windows应用程序。 首先...

    asp.net mvc 弹出窗口 技巧

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

    SignalR实现服务器与Web客户端的实时通信.rar.rar

    - 安全性:由于SignalR允许服务器主动向客户端发送数据,因此需要考虑防止未经授权的访问,例如使用OAuth或JWT进行身份验证。 - 性能优化:大量连接可能导致服务器压力增加,可以通过调整传输机制、使用反向代理(如...

    基于open62541的服务器和客户端

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

    用友客户端连接不上服务器 (分客户端和服务器问题 )

    客户端连接不上服务器 (分客户端和服务器问题 )

    弹出层登录窗口带有ajax验证登录

    在IT行业中,弹出层登录窗口是常见的用户体验设计,它允许用户在不离开当前页面的情况下进行身份验证。本文将深入探讨“弹出层登录窗口带有ajax验证登录”的实现及其相关技术。 首先,让我们理解弹出层(Popup ...

    IM聊服务器+客户端java源码

    - **身份验证与安全**:为了确保用户安全,客户端可能需要实现身份验证机制,如用户名/密码验证,或者使用更安全的OAuth、JWT等方案。 3. **通信机制**: - **TCP/IP**:IM系统通常基于TCP协议,因为TCP保证了...

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

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

    客户端与服务器的对话程序,有UI界面

    在IT行业中,客户端-服务器(Client-Server)架构是一种常见的通信模式,广泛应用于网络应用程序,如Web服务、数据库连接和文件共享等。本项目提供的"客户端与服务器的对话程序,有UI界面"就是一个典型示例,它允许...

    表单验证弹出对话框

    "表单验证弹出对话框"这个主题就是关于如何在用户提交表单时进行验证,并通过弹出对话框来提示用户未完成或错误的输入。下面将详细解释这一知识点。 首先,"带*内容必填"是指在表单中,用星号(*)标记的字段代表是...

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

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

    服务器客户端说明

    无锡监狱项目的服务器客户端通信涉及到四个主要部分:轮巡、报警、预案权限管理和新增窗口状态。这些功能都是通过服务器和客户端之间的交互实现的,其中轮巡功能的实现尤为关键。 【轮巡功能详解】 1. **轮巡需求*...

Global site tag (gtag.js) - Google Analytics