HTTP提供了一个原生的质询/响应框架,简化了对用户的认证过程
Web服务器接收到一条HTTP请求报文时,服务器没有直接响应请求的资源,而是以一个“认证质询”进行响应,要求用户提供一些保密信息来说明其身份。用户再次发起请求时,要附上保密证书(用户名和密码)。如果与要求的不匹配,服务器可以再次质询客户端,或者产生一条错误信息。如果证书匹配则返回请求的资源。
1、HTTP提供可定制的控制首部,为不同的认证协议提供了一个可扩展框架
2、HTTP提供了两个认证协议:基本认证和摘要认证。
HTTP基本认证将用户名和密码打包在一起,并使用base-64编码方式对其进行编码
下图是IIS中不同认证方式及相应类型
以下给一个扼要的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 指定登陆页面及错误页面