检查HTTP 的 Basic认证代码示例-JSP

简介: 检查HTTP 的 Basic认证. since http1.0代码如下所示: R U OK? R U OK? . Your Password is 请参考代码中的注释,具体信息,还可以参考《图解HTTP》。

检查HTTP 的 Basic认证. since http1.0

代码如下所示:

<%@ page pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" %>
<%@ page import="sun.misc.BASE64Decoder" %>
<%@ page import="java.io.IOException" %>
<%!
    // 检查HTTP 的 Basic认证. since http1.0
    public static boolean checkAuth(HttpServletRequest request, String id, String pwd){
        boolean authOK = false;
        // 认证后每次HTTP请求都会附带上 Authorization 头信息
        String Authorization = request.getHeader("Authorization");
        if(null == Authorization || Authorization.trim().isEmpty()){
            // 需要认证
            return authOK;
        }
        //
        String[] basicArray = Authorization.split("\\s+");
        if(null == basicArray || 2 != basicArray.length){
            return authOK;
        }
        //
        String basic = basicArray[0];
        String base64 = basicArray[1];
        //
        try {
            byte[] buf = new BASE64Decoder().decodeBuffer(base64);
            String idpass = new String(buf, "UTF-8");
            if(null == idpass || idpass.trim().isEmpty()){
                // 需要认证
                return authOK;
            }
            //
            String[] idpassArray = idpass.split(":");
            if(null == idpassArray || 2 != idpassArray.length){
                return authOK;
            }
            String _id = idpassArray[0];
            String _pass = idpassArray[1];
            //
            if(id.equalsIgnoreCase(_id) && pwd.equalsIgnoreCase(_pass)){
                authOK = true;// 认证成功
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        //
        return authOK;
    }

    // 不依赖 this 状态的方法,其实都应该设置为 static
    public static void requireAuth(HttpServletResponse response, String msg){
        // 发送状态码 401, 不能使用 sendError,坑
        response.setStatus(401,"Authentication Required");
        // 发送要求输入认证信息,则浏览器会弹出输入框
        response.addHeader("WWW-Authenticate","Basic realm="+ msg);
        return;
    }
%>
<%
    //
    String Authorization = request.getHeader("Authorization");
    //
    String userid = "admin";
    String pwd = "11111111";
    boolean authOK = checkAuth(request, userid, pwd);
    //
    if (!authOK) {
		// 如果认证失败,则要求认证
        requireAuth(response, "R U OK,小米");
        return;
    }
%>
<html>
<head>
    <title>R U OK?</title>
</head>
<body>
    R U OK? <%=userid %>. Your Password is <%="********"%>
</body>
</html>

请参考代码中的注释,具体信息,还可以参考《图解HTTP》。我看着这本书中的HTTP-Basic认证手痒,就写了这么一个demo代码。



目录
相关文章
|
3月前
|
算法 数据库 数据安全/隐私保护
摘要认证,使用HttpClient实现HTTP digest authentication
这篇文章提供了使用HttpClient实现HTTP摘要认证(digest authentication)的详细步骤和示例代码。
298 2
|
6月前
|
存储 网络安全 数据安全/隐私保护
[flask]使用mTLS双向加密认证http通信
【7月更文挑战第16天】在Flask应用中实现mTLS双向TLS加密认证可增强HTTP通信安全性。步骤包括: 1. 使用OpenSSL为服务器和客户端生成证书和密钥。 2. 配置Flask服务器使用这些证书: - 安装`flask`和`pyopenssl`. - 设置SSL上下文并启用mTLS验证: 注意事项: - 保持证书有效期并及时更新. - 确保证书链信任. - 充分测试mTLS配置.
125 2
|
5月前
|
安全 网络安全 数据安全/隐私保护
[flask]使用mTLS双向加密认证http通信
[flask]使用mTLS双向加密认证http通信
156 0
|
5月前
|
网络协议 应用服务中间件 Go
[golang]使用mTLS双向加密认证http通信
[golang]使用mTLS双向加密认证http通信
115 0
|
6月前
Qt http的认证方式以及简单实现
以上就是Qt实现HTTP认证的基本步骤。需要注意的是,以上代码未进行错误处理,实际使用时需要根据具体情况进行相应的错误处理。
132 1
|
7月前
|
Java 数据安全/隐私保护
JSP 教程 之 JSP HTTP 状态码 2
JSP教程讲解了HTTP状态码,包括成功、重定向、客户端错误和服务器错误等类别。例如,200表示请求成功,404表示页面未找到,500表示服务器内部错误。这些状态码帮助理解HTTP通信过程中发生的问题。
64 2
|
7月前
|
Java
JSP 教程 之 JSP HTTP 状态码 4
JSP教程讲解了HTTP状态码的使用,包括HTTP响应的结构和设置状态码的方法:通过HttpServletResponse的setStatus、sendRedirect及sendError。示例展示了如何发送407错误码,浏览器显示&quot;Need authentication!!!&quot;。
40 1
|
8月前
|
缓存 运维 Serverless
Serverless 应用引擎产品使用之在阿里函数计算中,使用签名认证调用HTTP触发器的步骤如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
363 7
|
存储 Web App开发 监控
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
我们以前使用过的对hbase和hdfs进行健康检查,及剩余hdfs容量告警,简单易用 1.针对hadoop2的脚本: #/bin/bashbin=`dirname $0`bin=`cd $bin;pwd`STATE_OK=...
1065 0
|
Web App开发 新零售 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
1.尽可能地了解需求,系统层面适用开闭原则 2.模块化,低耦合,能快速响应变化,也可以避免一个子系统的问题波及整个大系统 3.
757 0