我正在尝试向由glassfish服务器4托管的servlet发送auth请求,以纯文本形式接收消息。
servlet配置为使用机密传输(https)进行BASIC身份验证 (通过使用Web浏览器访问页面,验证和servlet应答工作)
这是使用ajax的jquery脚本:
$.ajax
({
type: "GET",
url: "https://192.168.146.128:8181/path_to_servlet",
dataType: 'text',
beforeSend: function(xhr) {
xhr.setRequestHeader("Authorization", "Basic " + btoa("username:password"));
},
async: false,
success: function (data){
alert(data);
}
});
和servlet代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text");
PrintWriter out = response.getWriter();
out.println("hello");
out.close();
}
问题是请求没有获得任何类型的任何答案(尝试IE,chrome和firefox具有相同的结果)。
我该怎么办?这是验证的正确方法吗? 我是否需要在每次进一步请求时发送标头授权请求?
答案 0 :(得分:0)
jQuery .ajax对象允许“用户名”和“密码”属性,不要尝试对您的授权标题进行硬编码。
根据HTTP规范,您发送数据请求,如果它受到保护,您将获得拒绝访问的响应,并使用Authorization标头回复。
如果在手动访问它时它不起作用,则服务器可能配置错误,向客户端发送一个不允许授权标头的Access-Control-Allow-Headers标头。如果它是手动(不使用Ajax)而不是可能是跨域问题,那么您可以检查您使用的浏览器的错误控制台或开发工具来检查请求的响应或引发的任何警告/错误