Angular HTTP 基本身份验证注销 header 忽略更改

Angular HTTP Basic Auth logout header change ignored

我正在使用基本的 HTTP 身份验证(没有用于测试的 SSL)。

登录正常,我们发送一个 $http 请求,授权 header,如果登录正确,它就可以。

为了注销,我将授权 header 设置为错误的值并向 "trick" 服务器发送 $http 请求。服务器似乎忽略了新更改的授权 header。我在FF里用开发者工具验证了header的值都是1,但是还是请求成功。

我如何"logout"?注销函数发送了一个错误的Authorizationheader,浏览器按照firebug发送。这是怎么回事?这是一个带有 Wildfly 9 和 Shiro 的 Java EE 7 应用程序,如果有区别的话。

代码如下:

var DataFactory = function($http, $rootScope, $base64, $cookieStore) {

    var _debug = false;
    function _d(message) {
        if (!_debug) {
            return;
        }
        console.log(message);
    }

    function setDebug(flag) {
        _debug = flag;
    }

    function doLogout() {
        _d("Logging out");
        $rootScope.globals = {};
        $cookieStore.remove('globals');
        $http.defaults.headers.common['Authorization'] = 'Basic 111111111111111111';
        $http.get(
                'http://localhost:8080/myapp/rest/v1/svc')
                .then(function(data) {
                    alert("Logout: " + JSON.stringify(data.data));
                }, function(data) {
                    alert("Logout Error: " + JSON.stringify(data))
                });
    }

    function doLogin(username, password) {
        var token = $base64.encode(username + ":" + password);
        _d("Logging " + username + " in with token " + token);

        $http.defaults.headers.common['Authorization'] = 'Basic ' + token; // jshint
        // ignore:line
        $rootScope.globals = {
            token : token,
            username : username
        };
        $cookieStore.put("globals", $rootScope.globals);
        _d("Login finished, globals are: " + JSON.stringify($rootScope.globals));
        $http.get(
                'http://localhost:8080/myapp/rest/v1/svc')
                .then(function(data) {
                    alert(JSON.stringify(data.data));
                }, function(data) {
                    alert("Error: " + JSON.stringify(data))
                });
    }
    ;

    return {
        setDebug : setDebug,
        doLogin : doLogin,
        doLogout : doLogout
    };
}

在 XHR 请求中发送您自己的授权字符串不会神奇地删除浏览器中缓存的信息。基本身份验证没有注销的概念。使用基本身份验证 "logout" 的唯一方法是使凭据在服务器上无效,即更改用户名 and/or 密码,以便存储的凭据不再有效。