浏览器原生登陆验证实现
在登陆某些web系统时,浏览器会弹出一个类似confirm的登陆框,供用户输入用户名和密码,进行验证。
由于此登陆框不是js控制的,遍找了下其实现原理。
http header WWW-Authenticate
此header一般和401 http状态一起使用。
1、服务端回向浏览器发送头信息,
WWW-Authenticate: Basic realm=“.”
2、浏览器收到后,便会弹回登陆框。填写完成确定后,请求头会包含,
Authorization: Basic YWRtaW46YWRtaW4=
其中Basic后面的信息,是"用户名:密码"的base64编码形式,用户名和密码使用半角冒号分隔
3、服务端收到请求后,获取Authorization头信息,并对其中的用户信息进行验证,并向浏览器注入cookie。
String auth = request.getHeader("Authorization"); if (StringUtils.isEmpty(auth)) { response.addHeader("WWW-Authenticate", "Basic realm=\".\""); response.setStatus(401); } else { auth = new String(Base64.getDecoder().decode(auth)); String name = auth.substring(0, auth.indexOf(":")); String password = auth.substring(auth.indexOf(":") + 1); }