Thanks for the pointer Dave. Perhaps was too wrapped around this being an authorization issue. I see OAuth2AuthenticationEntryPoint also extends AbstractOAuth2SecurityExceptionHandler, so I adjusted my security config a bit:
Code:
<beans:bean id="oauthAuthenticationEntryPoint" class="org.springframework.security.oauth2.provider.error.OAuth2AuthenticationEntryPoint">
<beans:property name="realmName" value="ISEC" />
<beans:property name="exceptionRenderer">
<beans:bean class="com.company.isec.security.handler.IsecOAuth2ExceptionRenderer"/>
</beans:property>
</beans:bean>
<beans:bean id="oauthAccessDeniedHandler" class="org.springframework.security.oauth2.provider.error.OAuth2AccessDeniedHandler"/>
For the case where no token is provided, my renderer is being invoked:
Code:
2012-10-15 06:29:41 INFO handler.IsecOAuth2ExceptionRenderer - handleHttpEntityResponse - exception: error="unauthorized", error_description="An Authentication object was not found in the SecurityContext"
Since my code just invokes the super class method, I see the response:
Code:
imac:Downloads jas$ curl --header "Accept: application/json" "http://localhost:9090/isec/api/rest/v1/client/articles/PM/16176148?tenantId=sigmaLifeScience" -w "\nhttp code: %{http_code}\n"
{"error":"unauthorized","error_description":"An Authentication object was not found in the SecurityContext"}
http code: 401
imac:Downloads jas$
But, when I provide an expired token (can see TokenStore.removeAccessToken() invoked), or a bogus token, my renderer code does not get invoked., and I see the standard responses:
Code:
imac:Downloads jas$ curl --header "Authorization: bearer 5ccc7bbe-07f4-4788-8eb0-07e79b8bb94c" --header "Accept: application/json" "http://localhost:9090/isec/api/rest/v1/client/articles/PM/16176148" -w "\nhttp code: %{http_code}\n"
{"error":"invalid_token","error_description":"Access token expired: 5ccc7bbe-07f4-4788-8eb0-07e79b8bb94c"}
http code: 401
imac:Downloads jas$ curl --header "Authorization: bearer xxxxxx-14a4-473e-81a7-c28da60b0de0" --header "Accept: application/json" "http://localhost:9090/isec/api/rest/v1/client/articles/PM/16176148?" -w "\nhttp code: %{http_code}\n"
{"error":"invalid_token","error_description":"Invalid access token: xxxxxx-14a4-473e-81a7-c28da60b0de0"}
http code: 401
imac:Downloads jas$
These last two scenarios are actually more interesting to me.
I'll keep looking, but any other pointers would be appreciated. 
Cheers,
Jeff