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

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

时间: 2024-10-28 23:39:18

检查HTTP 的 Basic认证代码示例-JSP的相关文章

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

检查HTTP 的 Digest  认证. since http1.1 代码如下所示:(此代码还不完善, RFC2617算法未实现). <%@ page pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" %> <%@ page import="sun.misc.BASE64Decoder" %> <%@ page import="java.i

http authorization basic请求代码示例

/** * */ package testJava.java; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.Base64; /** * @author xxx * @function * @date 2016年4

Python HTTP Basic 认证 + 下载文件到本地

简单代码示例 <span style="font-size:18px;">import urllib2 from base64 import encodestring url = 'http://www.xxx.com/xxxx.csv' user = 'aaa' passwd = 'bbbbb' req = urllib2.Request(url) basestr = encodestring('%s:%s' % (user,passwd))[:-1] req.add_h

扩展Django内置的auth模块代码示例

一,创建自定义User模型类.继承AbstractUser 方法1 新建一个表,表里面有手机号,邮箱,地址,一对一与User表进行关联 方法2 新定义一个类,继承类AbstractUser ( auth模块的User类也是继承此AbstractUser 类的) 说明:python 语法上,也是可以直接继承User类的 以下代码,我们扩展了两个字段,phone和addr 注意:settings.py中一定要指不使用内置的User表,而是使用新的UserInfo表 AUTH_USER_MODEL='

Python的HTTP Basic认证

一.HTTP的Basic认证: 在HTTP协议的通信过程中,HTTP协议定义了基本认证过程以允许HTTP服务器对WEB浏览器进行用户的身份认证的方法,当一个客户端向HTTP服务器进行数据请求时,如果客户端未被认证,则HTTP服务器将通过基本的认证过程对客户端的用户名和密码进行验证,以决定用户是否合法. 客户端在接收到HTTP服务器的身份认证要求后,会提示用户输入用户名和密码,然后将用户名及密码用BASE64进行加密,加密后的密文将附加于请求信息中,如用户名为Paul,密码为:123456时,客户

java 翻盖hashCode()深入探讨 代码示例

package org.rui.collection2.hashcode; /** * 覆盖hashcode * 设计HashCode时最重要的因素 就是:无论何时,对同一个对象调用HashCode都应该产生同样的值, * 如果你的HashCode方法依赖于对象中易变的数据,用户就要当心了,因为此数据发生变化 时 * HashCode就会生成一个不同的散列码,相当于产生一个不同的健 * 此外 也不应该使HashCode依赖于具有唯一性的对象信息,尤其是使用this的值,这只能很糟糕, * 因为这

SFTP客户端代码示例

SFTP客户端代码示例 环境:libssh2 1.4.3.zlib-1.2.8.openssl-1.0.1g Author: Kagula 最后更新日期:2014-5-18 从http://www.libssh2.org/下载libssh2-1.4.3.tar.gz文件,解压后打开libssh2.dsw文件升级项目到VisualStudio 2013,里面有两个项目,只要编译libssh2项目就可以了.编译前需要添加zlib和openssl的头文件和库文件链接位置,如果编译libssh2提示找不

Android Java使用JavaMail API发送和接收邮件的代码示例

JavaMail是Oracle甲骨文开发的Java邮件类API,支持多种邮件协议,这里我们就来看一下Java使用JavaMail API发送和接收邮件的代码示例 使用Javamail发送邮件,必需的jar包(请下载javamail的源文件,官方下载页:http://www.oracle.com/technetwork/java/javamail/index-138643.html):mailapi.jar.定义了收发邮件所使用到的接口API:smtp.jar.包含了发送邮件使用到的类:pop3.

详解BASIC认证

Basic 认证是HTTP 中非常简单的认证方式,因为简单,所以不是很安全,不过仍然非常常用.本文详细讲解BASIC认证的过程及原理. BASIC认证流程: 在HTTP协议进行通信的过程中,HTTP协议定义了基本认证过程以允许HTTP服务器对WEB浏览器进行用户身份证的方法,当一个客户端向HTTP服务 器进行数据请求时,如果客户端未被认证,则HTTP服务器将通过基本认证过程对客户端的用户名及密码进行验证,以决定用户是否合法. 客户端在接收到HTTP服务器的身份认证要求后,会提示用户输入用户名及密