检查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代码。



目录
相关文章
|
12月前
|
监控 测试技术 Go
告别传统Log追踪!GOAT如何用HTTP接口重塑代码监控
本文介绍了GOAT(Golang Application Tracing)工具的使用方法,通过一个Echo问答服务实例,详细展示了代码埋点与追踪技术的应用。内容涵盖初始化配置、自动埋点、手动调整埋点、数据监控及清理埋点等核心功能。GOAT适用于灰度发布、功能验证、性能分析、Bug排查和代码重构等场景,助力Go项目质量保障与平稳发布。工具以轻量高效的特点,为开发团队提供数据支持,优化决策流程。
715 91
|
算法 数据库 数据安全/隐私保护
摘要认证,使用HttpClient实现HTTP digest authentication
这篇文章提供了使用HttpClient实现HTTP摘要认证(digest authentication)的详细步骤和示例代码。
1209 2
|
10月前
|
安全 网络安全 流计算
修改代码以确保对SSL和HTTP异常的正确处理。
记得,在海上和代码世界里,风暴总是突如其来。但只要你的代码准备妥当,合理地处理SSL和HTTP异常,你的小船就能安全航行,最终到达它的目的地。
208 12
|
存储 缓存 搜索推荐
HTTP500代码怎么解决?常见的5xx网页错误及其原因
本文介绍了如何修复HTTP 500错误及常见的5xx网页错误。500错误表示服务器无法处理请求,可能由文件权限、脚本错误、数据库连接或配置问题引起。作为用户,可尝试重新加载页面、检查URL或清除缓存;作为网站所有者,需检查`.htaccess`文件、服务器日志、插件冲突及PHP版本等。此外,文章还列举了其他5xx错误(如502、503、504等)及其原因,帮助定位和解决服务器端问题,避免影响流量与搜索引擎排名。
8628 4
|
开发者
HTTP状态码是由网页服务器返回的三位数字响应代码,用于表示请求的处理结果和状态
HTTP状态码是由网页服务器返回的三位数字响应代码,用于表示请求的处理结果和状态
438 1
|
存储 网络安全 数据安全/隐私保护
[flask]使用mTLS双向加密认证http通信
【7月更文挑战第16天】在Flask应用中实现mTLS双向TLS加密认证可增强HTTP通信安全性。步骤包括: 1. 使用OpenSSL为服务器和客户端生成证书和密钥。 2. 配置Flask服务器使用这些证书: - 安装`flask`和`pyopenssl`. - 设置SSL上下文并启用mTLS验证: 注意事项: - 保持证书有效期并及时更新. - 确保证书链信任. - 充分测试mTLS配置.
505 2
|
安全 网络安全 数据安全/隐私保护
[flask]使用mTLS双向加密认证http通信
[flask]使用mTLS双向加密认证http通信
458 0
|
网络协议 应用服务中间件 Go
[golang]使用mTLS双向加密认证http通信
[golang]使用mTLS双向加密认证http通信
400 0
|
Java Apache
<!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从集群中有8台regionserver服务器,已稳定运行了5个多月,8月15号,发现集群中4个datanode进程死了,经查原因是内存 outofMemory了(因为这几台机器上部署了spark,给spark开的...
967 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
zookeeper watch的定义如下:watch事件是一次性触发器,当watch监视的数据发生变化时,通知设置了该watch的client,即watcher。
1147 0

热门文章

最新文章