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 指定登陆页面及错误页面
转载于:https://blog.51cto.com/langlichong/1737624