Angular JS和SpringBoot,通过身份验证后获取用户

问题描述 投票:0回答:1

我想在登录我的应用后获得用户以创建自己的帐户。例如,我希望他的ID将他重定向到页面:“ / user-cars /:userId”。我正在使用Angular JS和SpringBoot。我不知道该怎么做。下面是我的代码:

Config.js

angular.module('app')
.config(function ($routeProvider, $httpProvider) {
    $routeProvider
        .when('/users', {
            templateUrl: 'app/components/users/list/userList.html',
            controller: 'UserListController',
            controllerAs: 'ctrl'
        })
        .when('/user-add', {
            templateUrl: 'app/components/users/edit/userEdit.html',
            controller: 'UserEditController',
            controllerAs: 'ctrl'
        })

        .when('/user-cars/:userId', {
            templateUrl: 'app/components/users/userCars/carList.html',
            controller: 'CarListController',
            controllerAs: 'ctrl'
        })
        .when('/user-login',{
            templateUrl: 'app/components/users/login/login.html',
            controller: 'AuthenticationController',
            controllerAs: 'ctrl'
        })

        .otherwise({
            redirectTo: '/',
            controller: 'HomeController',
            controllerAs: 'ctrl'
        });
    $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';
});

authService.js

angular.module('app')
.constant('LOGIN_ENDPOINT', '/user-login')
.constant('LOGOUT_ENDPOINT', '/user-logout')
.service('AuthenticationService', function($http, LOGIN_ENDPOINT, LOGOUT_ENDPOINT) {
    this.authenticate = function(credentials, successCallback) {
        var authHeader = {Authorization: 'Basic ' + btoa(credentials.email+':'+credentials.password)};
        var config = {headers: authHeader};
        $http
            .post(LOGIN_ENDPOINT, {
            }, config)
            .then(function success(res) {
                $http.defaults.headers.post.Authorization = authHeader.Authorization;
                successCallback();
            }, function error(reason) {
                console.log('Login error');
                console.log(reason);
            });
    }
    this.logout = function(successCallback) {
        delete $http.defaults.headers.post.Authorization;
            successCallback();
    }

});

authController.js

angular.module('app')
.controller('AuthenticationController', function($rootScope, $location, AuthenticationService) {
    var vm = this;
    vm.credentials = {};
    var loginSuccess = function() {
        $rootScope.authenticated = true;
        $location.path('/');
    }
    vm.login = function() {
        AuthenticationService.authenticate(vm.credentials, loginSuccess);
    }
    var logoutSuccess = function() {
        $rootScope.authenticated = false;
        $location.path('/');
    }
    vm.logout = function() {
        AuthenticationService.logout(logoutSuccess);
    }
})

[一切正常,我从后端获得了负责人,但现在我不知道如何使用它并获得用户

RestController.java`

@RestController
public class AuthenticationController { 
    @RequestMapping("/user-login")
    @ResponseBody
    public Principal login(Principal user)
    {
        return user;
    }`

授权很有效,我有校长,但我不知道该和他做什么。

angularjs spring authorization
1个回答
0
投票

基于您的UserDetails实现,您可以填充用户详细信息。默认的implementation只有用户名和密码,其他详细信息可以添加到自定义实现中。

Spring reference documentation的示例

Authentication auth = httpServletRequest.getUserPrincipal();
// assume integrated custom UserDetails called MyCustomUserDetails
// by default, typically instance of UserDetails
MyCustomUserDetails userDetails = (MyCustomUserDetails) auth.getPrincipal();
String firstName = userDetails.getFirstName();
String lastName = userDetails.getLastName();

浏览注释,默认实现为UserDetails

针对您目的的自定义实现示例为

public class MyCustomUserDetails implements UserDetails{
 // Have the id field declared
 private String userId;
 // ...getters and setters

}

完整示例可见this SO问题和答案。

© www.soinside.com 2019 - 2024. All rights reserved.