2

アスペクトでラップする安らかなサービスのインターフェースがあります。

@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 コールに関する側面から、認証されたユーザーにアクセスする方法を提案できる人はいますか?

ありがとう

4

2 に答える 2

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;
  }
于 2013-07-01T15:53:11.813 に答える