jetty ajax error,Jetty,预检和ajax

以编程方式设置Jetty服务器,我尝试通过ajax和xmlHttpRequest访问它。未经授权,电话正常工作,但是,我得到401未经授权。 任何建议。Jetty,预检和ajax

JavaScript调用看起来像这样(缩短):

var auth = base64encode('name','pwd');

try{

var xmlhttp = new XMLHttpRequest();

xmlhttp.open("POST", "http://127.0.0.1:5563/ajax/index.html", true);

xmlhttp.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

xmlhttp.setRequestHeader('Authorization', auth);

xmlhttp.withCredentials = 'true';

xmlhttp.send();

xmlDoc = xmlhttp.responseXML;

$('#textResult').val(xmlDoc);

}

catch(e){

$('#textResult').val('CATCH: ' + e);

}

服务器的代码如下所示(甚至更短)

class CallObject extends HttpServlet {

//...

@Override

public void doOptions(HttpServletRequest request, HttpServletResponse response)

throws IOException

{

response.setHeader("Access-Control-Allow-Origin", "*");

response.setHeader("Access-Control-Allow-Methods",

"GET, POST, HEAD, OPTIONS");

response.setHeader("Access-Control-Allow-Credentials", "true");

response.setHeader("Access-Control-Allow-Headers",

"X-Requested-With, authorization");

}

//...

}

class WebServer{

//...

SecurityHandler sh = null;

if (logins != null && logins.length > 0){

String role = "user";

sh = new SecurityHandler();

Constraint constraint = new Constraint();

constraint.setName(Constraint.__BASIC_AUTH);

constraint.setRoles(new String[]{role});

constraint.setAuthenticate(true);

ConstraintMapping cm = new ConstraintMapping();

cm.setConstraint(constraint);

cm.setPathSpec("/*");

HashUserRealm hur = new HashUserRealm();

hur.setName("eMark Web Server");

for (int i = 0; i < logins.length; i++) {

String user_name = logins[i][0];

String password = logins[i][1];

hur.put(user_name, password);

hur.addUserToRole(user_name, role);

}

sh.setUserRealm(hur);

sh.setConstraintMappings(new ConstraintMapping[]{cm});

_server.setHandlers(

new Handler[]{sh, _contexts, new DefaultHandler()});

}

//...

}

2010-10-26

Jorgen

+0

我想这会对你有用[1](http://docs.codehaus.org/display/JETTY/How+to+Configure+Security+with+Embedded+Jetty)。我还可以看到你从javascript输入的凭证是“var auth = base64encode('name','pwd');”。这意味着'name'的凭证是'pwd',它应该出现在具有相关角色的码头 –

2011-08-03 09:25:48

+0

为什么您直接在客户端代码上设置“Authorization”请求标头?为什么不在open()方法中使用XmlHttpRequest支持进行身份验证? 此外,不知道您的base64encode函数是否将auth变量格式化为“name:pwd”。 –

2012-06-08 16:04:37

+0

看起来你正在做一个异步请求,但试图同步读取响应?这只是您发布此问题时所做的简化吗?如果不是,则需要为'xmlhttp'对象的'onreadystatechange'属性指定一个回调函数。 –

2012-08-07 01:13:24

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值