2010-07-26 13 views
2

J'essaie d'injecter un PortletRequest dans mon aspect classeinjection Spring AOP PortletRequest

@Autowired(required = true) 
private PortletRequest request; 

@Before("execution(* de.ac.mis.dao.*.getSessionFactory())") 
public void setUsername() { 
    System.out.println("Now I'm setting the username " + this.request); 
} 

me donne seulement une

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No matching bean of type [javax.portlet.PortletRequest] found for dependency: 
expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 

exception

mais je peux HttpServletRequest lier automatiquement - suis-je Il manque quelque chose?

Répondre

0

Ok résolu après quelques expériences, peut-être il pourrait être utile pour quelqu'un d'autre

@Before("execution(* de.ac.mis.dao.acDynamicUserSessionFactory.getSessionFactory())") 
public void setUsername(JoinPoint joinPoint) { 
    acDynamicUserSessionFactory dao = (acDynamicUserSessionFactory) joinPoint.getTarget(); 
    RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes(); 
    String userName = ""; 
    if (requestAttributes instanceof PortletRequestAttributes) { 
     PortletRequest request = ((PortletRequestAttributes) requestAttributes).getRequest(); 
     userName = request.getRemoteUser(); 
    } else if (requestAttributes instanceof ServletRequestAttributes) { 
     HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest(); 
     userName = request.getRemoteUser(); 
    } 
    dao.setUserName(userName); 
    this.log.debug("acUserSessionfactory was set for user: " + userName); 
} 

important pour ces config est que les ressources qui demandent (portlets ou servlets) doivent fonctionner dans un contexte de printemps autre pas requestattributes sont disponibles À ce point.

0

Je choisi d'utiliser resolveReference après avoir regardé les JavaDocs, qui prétend:

Au minimum: HttpServletRequest/PortletRequest référence pour "demande" clé et le HttpSession/référence PortletSession pour la clé "session".

Exemple de code:

RequestAttributes attrs = RequestContextHolder.getRequestAttributes(); 
// According to JavaDoc, PortletRequest should be available 
PortletRequest request = (PortletRequest) attrs.resolveReference("request");