忽略Angular HTTP Basic Auth注销标题更改

时间:2016-05-23 15:37:51

标签: angularjs http-headers

我使用基本的HTTP身份验证(没有SSL进行测试)。

登录工作正常,我们发送带有授权标头的$http请求,如果登录正确,则可以正常运行。

对于注销,我将授权标头设置为错误值,并向"技巧"发送$http请求。服务器。服务器似乎忽略了新更改的auth标头。我在FF中使用开发人员工具验证了标头值是全部,但请求仍然成功。

我如何"退出"?注销功能发送错误的授权标头,浏览器根据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
    };
}

1 个答案:

答案 0 :(得分:3)

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