POST的Spring方面:访问HTTPRequest以查找登录用户

时间:2013-06-27 13:43:32

标签: java spring rest spring-3

我有一个用于包含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呼叫的一个方面访问经过身份验证的用户?

由于

2 个答案:

答案 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;
  }