假设浏览器已发送网址:
http://user1:password1@myhost.com/index.html
此网址是否可以使用http Authorization
标题中的不同用户名/密码对进行发送?
例如:
$http({
method: 'GET',
url: 'http://user1:password1@myhost.com/index.html',
headers: {
'Authorization': 'Basic ' + btoa('username2:password2')
}
})
如果是,那么如何用HttpServletRequest
区分这些地方?
HttpServletRequest#getRemoteUser()
返回哪一个?
如何获得另一个?
更新
根据我的Fiddler观察,即使明确传递了网页客户端,也不会在URL中保留用户名和密码。相反,它将用户名和密码放入Authorization
标头中。如果不同的值通过javascript传递不同会发生什么,我不知道。无论如何,只发送一个用户名:密码已付。
但后来对错误代码的行为有所不同。如果在URL中传递了密码,则浏览器在401错误时不显示授权对话框。可能这取决于浏览器。
答案 0 :(得分:1)
来自标题:
String header = request.getHeader("Authorization")
然后解码它。
来自网址:
URL url = new URL(request.getRequestURL()); //http://username:password@hostname.com
String userInfo = url.getUserInfo() // username:password
https://docs.oracle.com/javase/7/docs/api/java/net/URL.html#getUserInfo()
用户名/密码应该在标头中传递,而不是URL的一部分。浏览器似乎可以跳过它而不是URL。
答案 1 :(得分:0)
网址中的用户名和密码不会发送到服务器。浏览器输入它们只是一个方便的功能,浏览器会将它们放入/复制到Authentication
标题中。