使用AngularJS Client和Java Jersey Backend的Basic Auth无法正常工作(标头未附加)

时间:2013-12-14 14:44:56

标签: security angularjs rest tomcat

我有一个Java Backend(带有Jersey)和一个Angular Client(在不同的主机上),它访问Jersey提供的api。

没有身份验证,一切都很好(我有一个CORS过滤器)。

现在,当我在Java后端向web.xml添加基本身份验证时,问题就开始了。

样品:

<security-constraint>
        <web-resource-collection>
            <web-resource-name>Sample</web-resource-name>
            <url-pattern>/manager-api/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>manager</role-name>
        </auth-constraint>
        <!--<user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>  -->
    </security-constraint>
    <login-config>
        <auth-method>BASIC</auth-method>
    </login-config>

我尝试在每个AngularJS $ http调用上设置Basis Authentication标头。但问题是,这个标题没有附加到首先进行的OPTIONS调用。

HTTP示例:

App.config(['$httpProvider', function($httpProvider) {
    $httpProvider.defaults.headers.common['Authorization'] = 'Basic ' + authdata;
}]);

你知道我怎么能得到这个吗?有没有办法将标题添加到选项调用?或者是否可以在不允许GET和POST调用的情况下允许OPTIONS调用?

非常感谢任何帮助。

电贺 马克

1 个答案:

答案 0 :(得分:0)

我没有看到任何地方定义的authdata。因此,除非您未包含所有相关代码,否则您将发送标题:Authorization: Basic