apolloconfig / apolloconfig/apollo

Spring Security简单认证改造问题

Aperta
#2,839 1 commento 0 reazioni 0 assegnatari Vedi su GitHub
feature request help wanted
Lingua principale
Java
Stelle
29.8k
Fork
10.2k
Merge medio
4g 7h
PR unite (30g)
4

Descrizione

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

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

  • {{'Common.Nav.Logout' | translate }}

  • 下增加:

  • {{'Common.Nav.UserManage' | translate }}
  • 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"};
    这样文本框可以回显

    请各位指教。

    Guida per i contributori

    Apri la guida per i contributori

    Valutazione

    Questa issue non è ancora stata valutata.

    Ricevi le nuove issue nella tua casella

    Un breve riepilogo di issue GitHub adatte ai principianti.