added WebScriptContext request scope support

This commit is contained in:
Brian Long 2024-11-14 11:19:33 -05:00
parent 6e7b5311f1
commit 74635514fe
3 changed files with 83 additions and 0 deletions

View File

@ -0,0 +1,50 @@
package com.inteligr8.alfresco.annotations.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Scope;
import org.springframework.extensions.webscripts.WebScript;
import org.springframework.extensions.webscripts.WebScriptRequest;
import org.springframework.extensions.webscripts.WebScriptResponse;
import org.springframework.web.context.WebApplicationContext;
import com.inteligr8.alfresco.annotations.context.WebScriptContext;
/**
* This aspect captures the WebScript execution context.
*/
@Aspect
public class WebScriptAspect {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private ThreadLocal<WebScriptContext> context = new ThreadLocal<>();
@Pointcut("execution(public void org.springframework.extensions.webscripts.WebScript.execute(..))")
public void isWebScriptExecute() {
}
@Around("isWebScriptExecute()")
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
this.logger.trace("execute({})", joinPoint);
WebScript ws = (WebScript) joinPoint.getTarget();
WebScriptRequest req = (WebScriptRequest) joinPoint.getArgs()[0];
WebScriptResponse res = (WebScriptResponse) joinPoint.getArgs()[1];
this.context.set(new WebScriptContext(ws, req, res));
return joinPoint.proceed();
}
@Bean
@Scope(WebApplicationContext.SCOPE_REQUEST)
public WebScriptContext getContext() {
return this.context.get();
}
}

View File

@ -0,0 +1,31 @@
package com.inteligr8.alfresco.annotations.context;
import org.springframework.extensions.webscripts.WebScript;
import org.springframework.extensions.webscripts.WebScriptRequest;
import org.springframework.extensions.webscripts.WebScriptResponse;
public class WebScriptContext {
private final WebScript webscript;
private final WebScriptRequest request;
private final WebScriptResponse response;
public WebScriptContext(WebScript webscript, WebScriptRequest request, WebScriptResponse response) {
this.webscript = webscript;
this.request = request;
this.response = response;
}
public WebScript getWebscript() {
return webscript;
}
public WebScriptRequest getRequest() {
return request;
}
public WebScriptResponse getResponse() {
return response;
}
}

View File

@ -13,5 +13,7 @@
<aspect name="com.inteligr8.alfresco.annotations.aspect.NodeTypeAspect" />
<aspect name="com.inteligr8.alfresco.annotations.aspect.NodeAspectAspect" />
<aspect name="com.inteligr8.alfresco.annotations.aspect.ChildIsPrimaryAspect" />
<aspect name="com.inteligr8.alfresco.annotations.aspect.WebScriptAspect" />
</aspects>
</aspectj>