2017-04-07 5 views
0

Ich versuche, eine Bean zu erstellen, die nur für eine einzelne Anfrage gültig ist, die die Rollen eines Benutzers enthält. Ich werde die Rollen in einer @Around-Methode vor dem Aufrufen von Controller-Methoden auffüllen. Ich muss dann später auf diese Rollen für andere Berechtigungsprüfungen zugreifen.Spring Anfrage scoped Bean konnte nicht autowired innerhalb @Around

@Component 
@Aspect 
public class SecurityAudit { 

    @Autowired 
    private CurrentRoles currentRoles; 


    @Around("@annotation(requestMapping) && execution(* 
com.myapp.controller..*.*(..))") 
    public Object around(ProceedingJoinPoint pjp, RequestMapping requestMapping) 
throws Throwable { 

     ... 
     ... 
     //I populate the roles with a db lookup. They will be referenced here, and later in controller methods as-needed. 

    } 
} 

package com.myapp.model; 

... 
... 

@JsonInclude(JsonInclude.Include.NON_NULL) 
@Generated("org.jsonschema2pojo") 
@JsonPropertyOrder({ 
"sso", 
"roles" 
}) 
@Component 
@Scope(value="request", proxyMode=ScopedProxyMode.TARGET_CLASS) 
public class CurrentRoles { 

    @JsonProperty("roles") 
    private Set<Role> roles; 

    ... 
    ... 

} 

ich folgendes:

org.springframework.beans.factory.BeanCreationException: Fehler beim Erstellen der Bohne mit dem Namen 'securityAudit': Die Injektion von autowired Abhängigkeiten fehlgeschlagen; Verschachtelte Ausnahme ist org.springframework.beans.factory.BeanCreationException: Feld konnte nicht automatisch gestartet werden: private com.myapp.model.CurrentRoles com.myapp.currentRoles; verschachtelte Ausnahme ist org.springframework.beans.factory.NoSuchBeanDefinitionException: Keine berechtigte Bean vom Typ [com.myapp.model.CurrentRoles] gefunden für Abhängigkeit: erwartet mindestens 1 Bean, die sich als Autowire-Kandidat für diese Abhängigkeit qualifiziert. Abhängigkeitsanmerkungen: {@ org.springframework.beans.factory.annotation.Autowired (required = true)}

Der Aspekt wird beim Start erstellt. Ich hätte aber, dass die injizierte Anfrage beanspruchte Bean Null bleiben würde, bis Anfragen beginnen, zu kommen, dann könnte ich die currentRoles-Bean für diese spezifische Anfrage auffüllen.

Antwort

0

Wahrscheinlich haben Sie @Service Annotation in Ihrer Serviceklasse vergessen;)