直接上代码:
angular.module('webb-ui').factory('authInterceptor', ['$q','$rootScope','$location','$injector','$timeout',function ($q,$scope,$location,$injector,$timeout) { function isNotPriv(url){ return url.indexOf("/priv/") === -1 } var authInterceptor = { 'request': function(config) { var deferred = $q.defer(); var url = config.url; deferred.resolve(config); return deferred.promise; }, 'response':function(response){ return response; }, 'responseError': function(rejection) { var rootScope = $injector.get('$rootScope'); if(isNotPriv(rejection.config.url)){ var status = rejection.status; if(status === 403){ $scope.four_zero_th = true;//自己的业务逻辑处理代码 rootScope.selectEtl(); return rejection; }else if(status === 401) { $scope.four_zero_one = true; rootScope.selectEtl(); return rejection; } } return $q.reject(rejection); } }; return authInterceptor; }]);
说明:responseError 此例子主要是对请求异常进行统一的拦截处理。
angular.module('webb-ui').config( ['$stateProvider', '$urlRouterProvider', '$httpProvider', '$locationProvider', function ($stateProvider, $urlRouterProvider, $httpProvider, $locationProvider) { $httpProvider.interceptors.push('authInterceptor'); /* *这里删除一个$injector,解决不能获取code码的问题。 * */ //$httpProvider.interceptors.pop();}]);
本文介绍了一个基于AngularJS的权限拦截器实现方法,通过自定义的authInterceptor服务来处理HTTP请求的响应错误,特别是针对401和403状态码进行了特别处理。
71

被折叠的 条评论
为什么被折叠?



