Роли управляемой аутентификации в весенней загрузке и angularjs

0

Мне немного сложно узнать, как я могу управлять своими ролями аутентификации на передней панели. Я хочу получить доступ к роли аутентификации и передать ее в корневую область, но вместо этого возвращает массив.

Я хочу знать, какую роль пользователь имеет для каждой роли. Как это можно сделать?

Если я звоню пользователю/пользователю

{"details":{"remoteAddress":"0:0:0:0:0:0:0:1","sessionId":"1F64CC142A715A53FFF4A9329E6B933D"},"authorities":[{"authority":"USER_ROLE"}],"authenticated":true,"principal":{"password":null,"username":"1@1","authorities":[{"authority":"USER_ROLE"}],"accountNonExpired":true,"accountNonLocked":true,"credentialsNonExpired":true,"enabled":true},"credentials":null,"name":"1@1"}

Это мой контроллер входа:

(function () {
    'use strict';

    angular
        .module('app')
        .controller('LoginController', LoginController);


    LoginController.$inject = ['$rootScope', '$scope', '$http', '$location', '$route','$localStorage'];
    function LoginController($rootScope, $scope, $http, $location, $route,$localStorage) {


        $scope.tab = function(route) {
            return $route.current && route === $route.current.controller;
        };


        var authenticate = function(credentials, callback) {

            var headers = credentials ? {
                authorization : "Basic "
                + btoa(credentials.username + ":"
                    + credentials.password)
            } : {};


            $http.get('user/', {
                headers : headers
            }).success(function(data) {
                if (data.name) {

                    //This returns an array...
                    console.log(data.authorities);

                    console.log("Good Credentials");
                    $rootScope.authenticated = true;
                } else {

                    $rootScope.authenticated = false;
                }
                callback && callback($rootScope.authenticated);
            }).error(function() {
                $rootScope.authenticated = false;
                callback && callback(false);
            });

        };

        authenticate();

        $scope.credentials = {};
        $scope.login = function() {
            authenticate($scope.credentials, function(authenticated) {
                if (authenticated) {
                    console.log("Login succeeded");
                    console.log($scope.credentials.username);
                    $location.path("/app/dashboard");
                    $scope.error = false;
                    $rootScope.authenticated = true;

                    //Here we add all the variables we need to the session that are safe to be seen
                    //In the future we can replace this and load this in the splash screen every time the application loads so we are sure the
                    // variables are stored



                } else {
                    console.log("Login failed")
                    $location.path("/login");
                    $scope.error = true;
                    $rootScope.authenticated = false;
                }
            })
        };



        //Logout
        $scope.logout = function() {
            $http.post('logout', {}).success(function() {
                $rootScope.authenticated = false;
                $location.path("/");
            }).error(function(data) {
                $location.path("/");
                console.log("Logout failed")
                $rootScope.authenticated = false;
            });
        }







    }

})();

Это мой контроллер

@RequestMapping("/user")
public Principal user(@AuthenticationPrincipal Principal user) {
    return user;
}
Теги:
spring
authentication

1 ответ

1
Лучший ответ

Как описано в документации Spring, @AuthenticationPrincipal вернет значение в Authentication.getPrincipal(). Однако, если вы посмотрите на Аутентификацию, вы увидите, что полномочия пользователя доступны отдельно от принципала, используя Authentication.getAuthorities().

Вы можете сделать пару вещей, либо изменить свой пользовательский Principal чтобы также включить роли пользователей, либо вы также можете захватить власти и сериализовать их в дополнение к основному в своем контроллере.

Вы можете получить текущую проверку подлинности с помощью: SecurityContextHolder.getContext().getAuthentication();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню