浏览器原生登陆验证实现

在登陆某些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);
}

 

posted @ 2017-05-16 19:57  mahuan2  阅读(1061)  评论(0编辑  收藏  举报