Spring AOP вводит PortletRequest - PullRequest
2 голосов
/ 26 июля 2010

Я пытаюсь внедрить запрос портлета в свой класс аспектов

@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);
}

Только дает мне

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)}

исключение

но я могу автоматически подключить HttpServletRequest - я что-то упустил?

Ответы [ 2 ]

0 голосов
/ 17 июля 2013

Я решил использовать resolReference после просмотра JavaDocs, который утверждает:

Как минимум: ссылка HttpServletRequest / PortletRequest для ключа "request" и HttpSession/ Ссылка на PortletSession для ключа "session".

Пример кода:

RequestAttributes attrs = RequestContextHolder.getRequestAttributes();
// According to JavaDoc, PortletRequest should be available
PortletRequest request = (PortletRequest) attrs.resolveReference("request");
0 голосов
/ 27 июля 2010

Хорошо, решил это после некоторого эксперимента, может быть, это может быть полезно для кого-то еще

@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);
}

Важным для этих настроек является то, что запрашивающие ресурсы (портлеты или сервлеты) должны работать в контексте весны, иначе на данный момент нет доступных атрибутов запроса.

...