我有一个用于包含Aspect的宁静服务的接口。
@Path("/rs-service/")
public interface ServiceRSI
{
@Override
@POST
@Path("/lookupParam/")
@Produces(MediaType.APPLICATION_XML)
ParamValue getParamValue(GetParamValue request);
}
然后是我的XML方面..
<aop:config>
<aop:aspect id="auditLoggingAspect" ref="auditLogging">
<aop:pointcut id="aspectA" expression="execution(* com.ServiceRSI.*(..))" />
<aop:around pointcut-ref="aspectA" method="logRequest" />
/>
</aop:aspect>
</aop:config>
我想要/需要做的是登录为进行此请求而经过身份验证的用户。 我正在使用MessageDigest作为我的身份验证的一部分。
通常我会访问HTTPRequest以找出在进行调用时已经过身份验证的用户,但是在这种情况下没有传递给方法,所以我不能在方面拦截这个。
是否有人可以建议一种方法从restufull呼叫的一个方面访问经过身份验证的用户?
由于
答案 0 :(得分:1)
如果您可以从HttpServletRequest
访问所需信息,那么您可以使用Spring的RequestContextHolder
来访问此信息。
ServletRequestAttributes t = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
HttpServletRequest req = t.getRequest();
有帮助吗?
答案 1 :(得分:1)
添加到web.xml
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
在课堂上你需要访问它......
@Autowired
private HttpServletRequest context;
然后是一些代码......(在这种情况下,它从Message Digest loggon中提取它)
private String getAuthenticationUser()
{
String authorization = context.getHeader("authorization");
if (authorization.startsWith("Digest response")) {
String[] splits = authorization.split(",");
for (String split : splits)
{
String[] splitKeyValue = split.trim().split("=");
if(splitKeyValue[0].equalsIgnoreCase("username")) {
authorization = splitKeyValue[1];
authorization = authorization.replace("\"", "");
break;
}
}
}
return authorization;
}