Though, it's not obvious, there is a way to intercept $resource request.
Here is an example:
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>Intercept resource request</title>
  <style type="text/css">.ng-cloak { display: none; }</style>
  <script src="angular.js"></script>
  <script src="angular-resource.js"></script>
  <script>
    angular.module("app", ["ngResource"]).
      factory(
        "services",
        ["$resource", function ($resource)
        {
          return $resource(
            "http://md5.jsontest.com/",
            {},
            {
              MD5: 
              {
                method: "GET",
                params: { text: null },
                then: function(resolve)
                {
                  this.params.text = "***" + this.params.text + "***";
                  this.then = null;
                  resolve(this);
                }
              }
            });
        }]).
      controller(
        "Test",
        ["services", function (services)
        {
          this.value = "Sample text";
          this.call = function()
          {
            this.result = services.MD5({ text: this.value });
          }
        }]);
  </script>
</head>
<body ng-app="app" ng-controller="Test as test">
  <label>Text: <input type="text" ng-model="test.value" /></label>
  <input type="button" value="call" ng-click="test.call()"/>
  <div ng-bind="test.result.md5"></div>
</body>
</html> 
How it works:
- $resource merges action definition, request params and data to build a config parameter for an $http request.
 
- A config parameter passed into an $http request is treated as a promise like object, so it may contain then function to initialize config.
 
- Action's then function may transform request as it wishes.
 
The demo can be found at transform-request.html
Elsewhere I've already shown a similar approach used to cancel $resource request.
See also: Intercept angularjs resource request