6

Ho la sicurezza del METODO SPRING completamente configurato per la mia applicazione web. (con le annotazioni PRE/POST abilitate).SpelEvaluationException: EL1007E: (pos 43): Campo o proprietà 'gruppo' non può essere trovato su null

Tuttavia recentemente ho riscontrato uno strano problema con loro. Sommario come segue:

  1. sintesi di POJO

    // User Class 
    public class User { 
        int id; 
        String name; 
        // getters and setters 
    } 
    
    // Group Class 
    public class Group { 
        int id; 
        String name; 
        // getters and setters 
    } 
    
    // GroupMembership class 
    public class GroupMembership { 
        private int id; 
        private User user; 
        private Group group; 
        // getters and setters 
    } 
    
  2. filtro pre-autorizzare il metodo.

    @PreAuthorize("canIEditGroupProfile(#membership.group.id)") 
    public int updateGroupMembership(GroupMembership membership) 
        throws GroupsServiceException; 
    

Dopo aver superato completamente popolato GroupMembership oggetto (corretto uso e composizioni di gruppo presenti), il filtro sicurezza getta eccezione seguente:

errorMessage: "Failed to evaluate expression 
    canIEditGroupProfile(#membership.group.id)'" 

Su scavare eccezione:

La causa è risultata essere:

org.springframework.expression.spel.SpelEvaluationException: 
    EL1007E:(pos 33): Field or property 'group' cannot be found on null 

Si prega di fornire indicazioni per indirizzare lo stesso.

+0

Controllare setter/getter e assicurarsi che siano corretti – xyz

+1

O un "nullo" viene passato come argomento o il codice viene compilato senza informazioni di debug. – zeroflagL

risposta

4

getter/setters sembra soddisfacente ... anche nessuna custodia di null.

Tuttavia un'osservazione interessante; questo mi dà un errore:

@PreAuthorize("canIEditGroupProfile(#membership.group.id)") 
public int updateGroupMembership(GroupMembership membership) 
    throws GroupsServiceException; 

Questo funziona bene:

@PreAuthorize("canIEditGroupProfile(#groupmembership.group.id)") 
public int updateGroupMembership(GroupMembership groupmembership) 
    throws GroupsServiceException; 

Inoltre ho osservato, il nome del parametro è stato mismatching in caso di primo (cioè servizio e ServiceImpl entrambi avevano differenti nomi dei parametri).

Ora mantenendo l'uniformità, il problema sembra essere risolto.

0

Ho riscontrato lo stesso problema nella mia applicazione Spring Boot. Si è scoperto che stavo compilando senza le informazioni sui simboli di debug, come è menzionato in un commento sopra. Vorrei sottolineare che ho potuto risolvere il problema in due modi:

1. (la mia preferita): sufficiente includere questo nella vostra pom.xml -> plugins

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
     <compilerArgument>-parameters</compilerArgument> 
     <testCompilerArgument>-parameters</testCompilerArgument> 
    </configuration> 
</plugin> 
  1. Se si utilizza Java 1.8 ed Eclipse come IDE, andare su Proprietà progetto -> Compilatore Java -> selezionare "Memorizza informazioni sui parametri del metodo (utilizzabile tramite riflessione)".

Ho trovato davvero interessante this link per ulteriori informazioni sul problema.

Spero che aiuti!

Problemi correlati