文章

开发框架扩展能力

开发框架扩展能力

1.如何往登录用户对象中添加额外信息

创建自定义的UserEnhancer类,往用户对象的additionalInformation属性中添加自定义信息。

登录成功后用户session的用户对象中就会包含额外信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.framework.backend.security.config.auth.UserEnhancer;
import com.framework.backend.security.entity.User;
import com.framework.backend.security.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.HashMap;
import java.util.Map;

public class CustomUserEnhancer implements UserEnhancer {
  @Autowired UserService userService;

  @Override
  public User enhance(User user) {
    QueryWrapper<User> queryWrapper = new QueryWrapper();
    queryWrapper.lambda().eq(User::getId, user.getId());
    User user1 = userService.getOne(queryWrapper);

    Map<String, Object> info = new HashMap();
    info.put("user1", user1);
    info.put("info1", "infoA");
    user.setAdditionalInformation(info);
    return user;
  }
}

1
2
3
4
5
6
7
8
9
10
11
import com.framework.backend.security.config.auth.UserEnhancer;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

@Component
public class CustomUserEnhancerConfig {
  @Bean
  UserEnhancer userEnhancer() {
    return new CustomUserEnhancer();
  }
}

2.如何自定义用户密码验证规则

框架中的修改用户密码方法会调用自定义密码验证规则进行校验。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import com.framework.backend.security.config.password.PasswordCheck;

public class CustomPasswordCheck implements PasswordCheck {
  @Override
  public String getErrorMessage() {
    return "密码长度不能小于5位";
  }

  @Override
  public boolean check(String password) {
    boolean result = true;
    if (password.length() < 5) {
      result = false;
    }

    return result;
  }
}
1
2
3
4
5
6
7
8
9
10
11
import com.framework.backend.security.config.password.PasswordCheck;
import org.springframework.context.annotation.Bean;

@Component
public class CustomPasswordCheckConfig {
  @Bean
  PasswordCheck passwordCheck() {
    return new CustomPasswordCheck();
  }
}

本文由作者按照 CC BY 4.0 进行授权