HTTP提供了一个原生的质询/响应框架,简化了对用户的认证过程

Web服务器接收到一条HTTP请求报文时,服务器没有直接响应请求的资源,而是以一个“认证质询”进行响应,要求用户提供一些保密信息来说明其身份。用户再次发起请求时,要附上保密证书(用户名和密码)。如果与要求的不匹配,服务器可以再次质询客户端,或者产生一条错误信息。如果证书匹配则返回请求的资源。

1、HTTP提供可定制的控制首部,为不同的认证协议提供了一个可扩展框架

2、HTTP提供了两个认证协议:基本认证和摘要认证


HTTP基本认证将用户名和密码打包在一起,并使用base-64编码方式对其进行编码

下图是IIS中不同认证方式及相应类型

Http协议认证_http basic 认证

以下给一个扼要的HTTP Basic认证的java实现:

BASIC认证的JAVA实现代码
 
HttpSession session=request.getSession();
         String user=(String)session.getAttribute("user");
         String pass;
         if(user==null){
             try{
                response.setCharacterEncoding("GBK");
                PrintWriter ut=response.getWriter();
                String authorization=request.getHeader("authorization");
                if(authorization==null||authorization.equals("")){
                    response.setStatus(401);
                    response.setHeader("WWW-authenticate","Basic realm=\"请输入管理员密码\"");
                    out.print("对不起你没有权限!!");
                    return;
                }
                String userAndPass=new String(new BASE64Decoder().decodeBuffer(authorization.split(" ")[1]));
                if(userAndPass.split(":").length<2){
                    response.setStatus(401);
                    response.setHeader("WWW-authenticate","Basic realm=\"请输入管理员密码\"");
                    out.print("对不起你没有权限!!");
                    return;
                }
                user=userAndPass.split(":")[0];
                pass=userAndPass.split(":")[1];
                if(user.equals("111")&&pass.equals("111")){
                    session.setAttribute("user",user);
                    RequestDispatcher dispatcher=request.getRequestDispatcher("index.jsp");
                    dispatcher.forward(request,response);
                }else{
                    response.setStatus(401);
                    response.setHeader("WWW-authenticate","Basic realm=\"请输入管理员密码\"");
                    out.print("对不起你没有权限!!");
                    return;
                }
             }catch(Exception ex){
                ex.printStackTrace();
             }
         }else{
             RequestDispatcher dispatcher=request.getRequestDispatcher("index.jsp");
             dispatcher.forward(request,response);
       }


以下为使用tomcat进行简单的http 认证配置:

1、在tomcat conf目录下配置tomcat-users.xml 添加相关的用户角色等

2、建立一个web项目

3、修改web项目的web描述符文件,做如下配置

<security-constraint>
  	<web-resource-collection>
  		<web-resource-name>
  			Restricted Area
  		</web-resource-name>
  		<url-pattern>/index.jsp</url-pattern>
  	</web-resource-collection>
  	<auth-constraint>
  		<role-name>tomcat</role-name>
  		<role-name>author</role-name>
  		<role-name>reader</role-name>
  	</auth-constraint>
  </security-constraint>
  
  <login-config>
  	<auth-method>BASIC</auth-method>
  </login-config>

<web-resource-collection> 定义web资源集合,一般用<url-pattern>或者<http-method>来配置需要保护的资源(路径),<auth-constraint>里面定义的角色才可以访问受保护的资源
login-config用于指定http认证相关配置,auth-method指定认证的方式:BASIC (大写,基本验证)、DIGEST (摘要验证),FORM (基于表单的验证) 或者 CLIENT-CERT (客户证书验证),表单认证需要配置form-login-config 指定登陆页面及错误页面