Java 码头、飞行前和ajax
以编程方式设置Jetty服务器,我尝试通过ajax和xmlHttpRequest访问该服务器。在没有授权的情况下,电话正常工作,但我得到401未经授权。 任何建议 Javascript调用如下所示(缩短): 服务器代码如下所示(甚至更短)Java 码头、飞行前和ajax,java,javascript,ajax,jetty,Java,Javascript,Ajax,Jetty,以编程方式设置Jetty服务器,我尝试通过ajax和xmlHttpRequest访问该服务器。在没有授权的情况下,电话正常工作,但我得到401未经授权。 任何建议 Javascript调用如下所示(缩短): 服务器代码如下所示(甚至更短) class CallObject扩展了HttpServlet{ //... @凌驾 公共无效选项(HttpServletRequest请求、HttpServletResponse响应) 抛出IOException { response.setHeader(“访
class CallObject扩展了HttpServlet{
//...
@凌驾
公共无效选项(HttpServletRequest请求、HttpServletResponse响应)
抛出IOException
{
response.setHeader(“访问控制允许原点“,“*”);
setHeader(“访问控制允许方法”,
“获取、发布、标题、选项”);
setHeader(“访问控制允许凭据”,“true”);
response.setHeader(“访问控制允许标头”,
“X-请求-授权”);
}
//...
}
类Web服务器{
//...
SecurityHandler sh=null;
if(logins!=null&&logins.length>0){
字符串role=“user”;
sh=新的SecurityHandler();
约束=新约束();
constraint.setName(constraint.\u BASIC\u AUTH);
setRoles(新字符串[]{role});
constraint.setAuthenticate(true);
ConstraintMapping cm=新的ConstraintMapping();
cm.setConstraint(约束);
cm.setPathSpec(“/*”);
HashUserRealm hur=新的HashUserRealm();
hur.setName(“emarkweb服务器”);
对于(int i=0;i
您的base64encode
函数如何处理这两个参数?授权
标题的值必须是字符串用户名:密码
的base64编码值。(注意冒号。)
注意:对于同源XMLHttpRequests,您可以将用户名和密码作为参数提供给该方法。授权标头应如以下示例所示:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
其中,出现在“Basic”之后的文本是base64编码:
有关详细信息,请查看此链接:
我想这会对你有用[1]。()。我还可以看到您从javascript输入的凭据是“var auth=base64encode('name','pwd');”。这意味着“name”的凭据是“pwd”,它应该与相关角色一起出现在jetty上为什么直接在客户端代码上设置“Authorization”请求头?为什么不在open()方法中使用XmlHttpRequest对身份验证的支持?另外,不确定base64encode函数是否将auth变量格式化为“name:pwd”。看起来您正在发出异步请求,但尝试同步读取响应?这只是你在发布这个问题时所做的简化吗?如果没有,则需要为
xmlhttp
对象的onreadystatechange
属性分配回调函数。
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()});
}
//...
}
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==