Java Spring AOP注入PortletRequest

Java Spring AOP注入PortletRequest,java,spring,aop,portlet,aspects,Java,Spring,Aop,Portlet,Aspects,我正在尝试在我的方面类中注入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);

我正在尝试在我的方面类中注入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);
}
只给了我一个

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
-我遗漏了什么吗?

好的,在一些实验之后解决了它,也许它对其他人有用

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

对于这些配置来说,重要的是请求资源(Portlet或Servlet)必须在spring上下文中运行,否则此时没有可用的requestattributes。

好的,在一些实验之后解决了这个问题,也许它对其他人有用

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

对于这些配置,重要的是请求资源(Portlet或Servlet)必须在spring上下文中运行,否则此时没有可用的requestattributes。

在查看JavaDocs后,我选择使用resolveReference,它声明:

至少:密钥的HttpServletRequest/PortletRequest引用 “请求”,以及密钥的HttpSession/PortletSession参考 “会议”

示例代码:

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

在查看JavaDocs后,我选择使用resolveReference,它声称:

至少:密钥的HttpServletRequest/PortletRequest引用 “请求”,以及密钥的HttpSession/PortletSession参考 “会议”

示例代码:

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