Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 码头、飞行前和ajax_Java_Javascript_Ajax_Jetty - Fatal编程技术网

Java 码头、飞行前和ajax

Java 码头、飞行前和ajax,java,javascript,ajax,jetty,Java,Javascript,Ajax,Jetty,以编程方式设置Jetty服务器,我尝试通过ajax和xmlHttpRequest访问该服务器。在没有授权的情况下,电话正常工作,但我得到401未经授权。 任何建议 Javascript调用如下所示(缩短): 服务器代码如下所示(甚至更短) class CallObject扩展了HttpServlet{ //... @凌驾 公共无效选项(HttpServletRequest请求、HttpServletResponse响应) 抛出IOException { response.setHeader(“访

以编程方式设置Jetty服务器,我尝试通过ajax和xmlHttpRequest访问该服务器。在没有授权的情况下,电话正常工作,但我得到401未经授权。 任何建议

Javascript调用如下所示(缩短):

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

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==