apolloconfig / apolloconfig/apollo

Spring Security简单认证改造问题

Abierto
#2,839 1 comentario 0 reacciones 0 asignados Ver en GitHub
feature request help wanted
Lenguaje dominante
Java
Estrellas
29.8k
Forks
10.2k
Merge medio
4 d 7 h
PR fusionados (30 d)
4

Descripción

背景:
公司大部分都是业务人员,不想接入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"};
    这样文本框可以回显

    请各位指教。

    Guía de contribución

    Abrir la guía de contribución

    Evaluación

    Este issue todavía no se ha evaluado.

    Recibe los nuevos issues en tu correo

    Un resumen breve de issues de GitHub para principiantes.