具有基本身份验证的 Jersey cors 不起作用

Posted

技术标签:

【中文标题】具有基本身份验证的 Jersey cors 不起作用【英文标题】:Jersey cors with basic authentication not working 【发布时间】:2014-10-08 11:11:45 【问题描述】:

我正在尝试在我的球衣网络服务器中启用 CORS。我读了this page。所以我创建了我的过滤器

import java.io.IOException;

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.Provider;

@Provider
public class CORSFilter implements ContainerResponseFilter 


    @Override
    public void filter(final ContainerRequestContext requestContext,
            final ContainerResponseContext responseContext) throws IOException 

        final MultivaluedMap<String, Object> headers = responseContext
                .getHeaders();

        headers.add("Access-Control-Allow-Origin", "*");
        headers.add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
        headers.add("Access-Control-Allow-Credentials", "true");
        headers.add("Access-Control-Allow-Headers",
                "X-Requested-With, Content-Type, X-Codingpedia, ");

    


这是我的 jQuery 测试

    $.ajax(
        type: 'GET',
        url: myURL,
        crossDomain: true,
        dataType: 'jsonp',
        success: function (data) 
            console.log(data);
        ,
        error: function (data) 
            console.log(data.statusText);
            console.log(data.name);
        ,
        headers: 
            "Authorization": "Basic " + btoa('login:pass'),
            "Accept": "application/json"
        
    );

当我运行这个 js 时,它不断询问我的登录名和密码,即使我输入正确,总是返回 401 未授权。

【问题讨论】:

顺便说一句,我正在使用 apache shiro 进行身份验证。当我通过邮递员测试网络服务时,我发送基本身份验证并正常工作,现在我通过浏览器上方的 javascript 发送继续请求登录并通过。 这是我的错误,由于数据库连接问题,它没有进行身份验证,但我仍然不知道为什么一旦我已经通过了 jQuery 请求,浏览器就会继续请求登录名和密码。 【参考方案1】:

解决它,我发现this post。只需要改变

数据类型:'jsonp',

数据类型:'json',

从jsonp开始,忽略ajax请求头。

【讨论】:

以上是关于具有基本身份验证的 Jersey cors 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

带有基本 HTTP 身份验证的 CORS

具有 CORS 和基本身份验证支持的 WCF 自托管数据服务

jQuery 基本身份验证不起作用

具有 REST 身份验证 API 的节点快递网站 - CORS 问题

Java:使用带有 Spring Security 的 Jersey Jax-RS 进行用户身份验证

在 Spring Security 上具有不记名身份验证的 CORS