Spring Boot: конфигурация YAML не загружена в bean-компонент - PullRequest
0 голосов
/ 12 июля 2020

role-permissions-mappings.yml

Содержимое:

role-mapping-permissions: 
 rolePermissions: 
  - 
   role : 'role1'
   permissions: 
    -'role1'
    -'perm1'
    -'perm2'
  -     
   role: 'role2'
   permissions: 
    -'role2'
    -'perm1'
    -'perm2'

Класс конфигурации:

@Configuration
@ConfigurationProperties(prefix="role-mapping-permissions")
@EnableConfigurationProperties
@Slf4j
public class RolePermissionMapping {
    
    private List<RoleDetails> rolePermissions = new ArrayList<>();
    
    @PostConstruct
    public void init(){
        if(!rolePermissions.isEmpty()){
            log.info("Role -Permission size {}",rolePermissions.size());
        }else{
            log.info("role-permission-mapping is not configured");
        }
    }
      
  
    public List<RoleDetails> getRolePermissions() {
        return rolePermissions;
    }

    public void setRolePermissions(List<RoleDetails> rolePermissions) {
        this.rolePermissions = rolePermissions;
    }
    
    public static class RoleDetails {
        private String role;
        private List<String> permissions = new ArrayList<String>();
        public RoleDetails(String role,List<String> permissions){
            this.role= role;
            this.permissions = permissions;
        }
        public String getRole() {
            return role;
        }
        public void setRole(String role) {
            this.role = role;
        }
        public List<String> getPermissions() {
            return permissions;
        }
        public void setPermissions(List<String> permissions) {
            this.permissions = permissions;
        }
        
    }
}

Ожидаемый результат должен быть: Код выше показывает результат сопоставление разрешений ролей не настроено вместо загрузки конфигурации и выполнения log.info("Role -Permission size {}",rolePermissions.size());

Необходимо использовать @Value аннотация даже после добавления аннотации @PropertySource. Есть ли способ использовать без аннотации @Value?

1 Ответ

0 голосов
/ 12 июля 2020
• 1000 конструктор реализован.

Класс конфигурации обновления:

@Configuration
@ConfigurationProperties(prefix="role-mapping-permissions")
@PropertySource(value="classpath:role-permissions-mapping.yml",factory = YamlPropertySourceFactory.class)
@Slf4j
public class RolePermissionMapping {
    
    private List<RoleDetails> rolePermissions = new ArrayList<>();
    private Map<String,List<String>> rolePermissionMap;
   
    /*Empty constructor*/
    public RolePermissionMapping() {
    }
    
    @PostConstruct
    public void init(){
        if(!rolePermissions.isEmpty()){
            rolePermissionMap = new HashMap<String, List<String>>();
            rolePermissions.stream().forEach(rolePermissions->{
                rolePermissionMap.put(rolePermissions.getRole(), rolePermissions.getPermissions());
            });
        }else{
            log.debug("role-permission-mapping is not configured");
        }
    }

    public List<String> getPermissions(String role) {
        if(StringUtils.isEmpty(role) || !rolePermissionMap.entrySet().contains(role)){
            throw new ResourceNotFoundException("Role Name '"+role+"' not found.");
        }
        return rolePermissionMap.get(role);
        
    }


    public List<RoleDetails> getRolePermissions() {
        return rolePermissions;
    }

    public void setRolePermissions(List<RoleDetails> rolePermissions) {
        this.rolePermissions = rolePermissions;
    }

    @Configuration
    public static class RoleDetails {
        private String role;
        private List<String> permissions = new ArrayList<String>();
        
        /*Empty constructor*/
        public RoleDetails(){
            
        }
        
        public String getRole() {
            return role;
        }
        public void setRole(String role) {
            this.role = role;
        }
        public List<String> getPermissions() {
            return permissions;
        }
        public void setPermissions(List<String> permissions) {
            this.permissions = permissions;
        }
        
    }
}
...