如果有人能告诉我该身份验证有什么问题,我真的很感激吗?我从服务器上取下身份验证,在没有它的情况下进行测试,但javascript被破坏了。
$('#btnSignIn').click(function() {
var username = $("#username").val();
var password = $("#password").val();
function make_base_auth(user, password) {
var tok = user + ':' + password;
var final = "Basic " + $.base64.encode(tok);
console.log("FINAL---->" +final);
alert("FINAL---->" +final);
return final;
}
$.ajax({
type: "GET",
contentType: "application/json",
url: "http://localhost:8080/SesameService/webresources/users/secured/login",
crossDomain: true,
dataType: "text",
async: false,
data: {},
beforeSend: function (xhr){
xhr.setRequestHeader('authorization', make_base_auth(username, password));
},
success: function() {
alert('Thanks for your signin in! ');
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
alert(' Error in signIn-process!! ' +textStatus);
}
});
});
错误:如果我拿
beforeSend: function (xhr){
xhr.setRequestHeader('authorization', make_base_auth(username, password));
- 离开该功能,我可以进入REST服务。我目前还没有进行身份验证。这可能是我在使用该标头时在服务器上进行身份验证的原因吗?
contentType: "application/json",
@GET
@Path("/secured/login")
@Produces({"text/plain"})
public String login() {
return "Is it working or not?";
}
在JS中使用beforeSend-part时,出现错误:
[Exception... "Failure" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: http://localhost:8383/Sesame/assets/js/jquery.min.js :: .send :: line 3" data: no] { message="Failure"
, result=2147500037
, name="NS_ERROR_FAILURE"
,
如果我理解正确,标题中的“authorization + Basic”告诉Glassfish服务器,将完成基本身份验证。身份验证后,它转到REST服务,在我的情况下,返回json-object到HTML5客户端。 HTML5-client在localhost:8383中运行,其余服务在localhost:8080中运行。
如果我直接在localhost:8080中运行安全的rest-services,它就可以了,所以这不是问题。问题是,当我使用或尝试使用来自不同域localhost:8383的rest-services时,我得到JS-error console.log('---- ERROR IN ------ Siging IN-- --------');我不是百分百肯定,但我认为问题是401未经授权,因此跨域身份验证无效。
Shoud我插入crossDomain:true?我在某个地方看过它,也许情况可能就是这样?
在服务器端,我有过滤器:
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
<param-value>util.CrossOriginResourceSharingFilter</param-value>
</init-param>
public ContainerResponse filter(ContainerRequest request, ContainerResponse response) {
response.getHttpHeaders().putSingle("Access-Control-Allow-Origin", "*");
response.getHttpHeaders().putSingle("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
response.getHttpHeaders().putSingle("Access-Control-Allow-Headers", "content-type");
return response;
}
问题
1)如果服务器没有配置用于身份验证,我仍然可以使用授权标头来破坏应用程序并导致错误吗?
2)JS错误意味着什么?
干杯, 萨米