Acho mais viável isso vir via http header (o cliente seta isso)
Ex basicão só para contextualizar mesmo o que importa é add o header:
URL myURL = new URL(serviceURL);
HttpURLConnection myURLConnection = (HttpURLConnection)myURL.openConnection();
String userCredentials = "username:password";
String basicAuth = "Basic " + new String(new Base64().encode(userCredentials.getBytes())); //onde o cliente define o token
myURLConnection.setRequestProperty ("Authorization", basicAuth);
myURLConnection.setRequestMethod("POST");
myURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
myURLConnection.setRequestProperty("Content-Length", "" + Integer.toString(postData.getBytes().length));
myURLConnection.setRequestProperty("Content-Language", "en-US");
myURLConnection.setUseCaches(false);
myURLConnection.setDoInput(true);
myURLConnection.setDoOutput(true);
e em um interceptor verifica se esse campo do header possui valor(token), se possuir ele efetua a validação, caso a validação ocorra com sucesso, permite o acesso aos serviços, caso contrário pode retornar um reponse error. Dessa maneira não há necessidade de alterar nada em nenhum controller/method seu, caso você queira, você ainda pode especificar isso para um único controller ou para todos os controllers. Normalmente utilizo essa abordagem para serviços de webservice soap com um handler, mas esse meu handler eu valido pelos campos do http header. Acho que dá para levar a mesma ideia para os serviços rest.
Enfim, espero que a ideia possa ajudar, e desculpem os erros de digitação.