我想在登录我的应用后获得用户以创建自己的帐户。例如,我希望他的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;
}`
授权很有效,我有校长,但我不知道该和他做什么。
基于您的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问题和答案。