apolloconfig/apollo

Spring Security简单认证改造问题

Open

#2.839 aberto em 12 de dez. de 2019

Ver no GitHub
 (1 comment) (0 reactions) (0 assignees)Java (10.177 forks)batch import
feature requesthelp wanted

Métricas do repositório

Stars
 (29.769 stars)
Métricas de merge de PR
 (Mesclagem média 4d 13h) (6 fundiu PRs em 30d)

Description

背景: 公司大部分都是业务人员,不想接入SSO,直接用Spring Security简单认证,但是这个登录只有管理员可以修改用户信息,希望普通用户登录后可以自己修改个人信息;

改造: 1、修改static/views/common/nav.html 用户退出:

user-manage-comm.html 直接拷贝的 user-manage.html

2、修改 static/scripts/services/UserService.js,增加 update_comm_user appService.service('UserService', ['$resource', '$q', function ($resource, $q) { var user_resource = $resource('', {}, { load_user: { method: 'GET', url: '/user' }, find_users: { method: 'GET', url: '/users' }, create_or_update_user: { method: 'POST', url: '/users' }, update_comm_user: { method: 'POST', url: '/userscomm' } }); return { load_user: function () { var finished = false; var d = $q.defer(); user_resource.load_user({}, function (result) { finished = true; d.resolve(result); }, function (result) { finished = true; d.reject(result); }); return d.promise; }, find_users: function (keyword) { var d = $q.defer(); user_resource.find_users({ keyword: keyword }, function (result) { d.resolve(result); }, function (result) { d.reject(result); }); return d.promise; }, createOrUpdateUser: function (user) { var d = $q.defer(); user_resource.create_or_update_user({}, user, function (result) { d.resolve(result); }, function (result) { d.reject(result); }); return d.promise;
}, updateCommUser: function (user) { var d = $q.defer(); user_resource.update_comm_user({}, user, function (result) { d.resolve(result); }, function (result) { d.reject(result); }); return d.promise; } } }]);

3、修改 com/ctrip/framework/apollo/portal/spi/springsecurity/SpringSecurityUserService.java,增加 @Transactional public void updateComm(UserPO user) { String username = user.getUsername();

User userDetails = new User(username, encoder.encode(user.getPassword()), authorities);

if (userDetailsManager.userExists(username)) {
  userDetailsManager.updateUser(userDetails);
  UserPO managedUser = userRepository.findByUsername(username);
  managedUser.setEmail(user.getEmail());

  userRepository.save(managedUser);
}

}

4、修改 com/ctrip/framework/apollo/portal/controller/UserInfoController.java 增加 @PostMapping("/userscomm") public void updateCommUser(@RequestBody UserPO user) { if (StringUtils.isContainEmpty(user.getUsername(), user.getPassword())) { throw new BadRequestException("Username and password can not be empty."); }

if (userService instanceof SpringSecurityUserService) {
  ((SpringSecurityUserService) userService).updateComm(user);
} else {
  throw new UnsupportedOperationException("Create or update user operation is unsupported");
}

}

5、经过上面步骤,此时普通用户可以修改用户信息,但是希望只能修改自己的信息,所以希望用户名文本框是带回回显只读,并绑定user.username,但是 directive 导入的userName无法赋值,文本框是空值,自己写的例子可以,但是apollo工程中修改/user-manage-comm.html 用户名文本框就不行。 方法一: 修改 /user-manage-comm.html 或

方法二: 修改 /user-manage-comm.html 修改 static/scripts/controller/UserController.js $scope.user={} 改为 $scope.user={"username":$scope.userName};

6、将上面方法二 修改 static/scripts/controller/UserController.js $scope.user={} 改为 $scope.user={"username":"zhangsan"}; 这样文本框可以回显

请各位指教。

Guia do colaborador