A solução do garcia-jj é bem prática.
No entanto se você não estiver utilizando JBoss, e quiser ter um controle semelhante, você pode anotar seus métodos que devem ter restrição.
Ex:
Crie uma Classe de Anotação
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface RestritoApenasAdmins {
}
Depois você anota os métodos que devem ficar sujeitos a esta restrição nas suas classes de Controller
...
@Put
@Path("/administracao/parametrosSistema/{parametroSistema.id}")
@RestritoApenasAdmins
@Transactional
public void atualizaParametrosSistema(ParametroSistema parametroSistema) {
//TODO
}
...
E por fim, crie um Interceptor, para verificar, se o método chamado está anotado com a classe que você criou (RestritoApenasAdmins). Caso esteja, ele faz uma determinada ação se não atender aos seus pré-requisitos.
@Intercepts
public class AutenticacaoInterceptor implements Interceptor {
private final Result result;
private final LoginSession loginSession;
public AutenticacaoInterceptor(Result result, LoginSession loginSession) {
this.result = result;
this.loginSession = loginSession;
}
@Override
public void intercept(InterceptorStack stack, ResourceMethod method, Object resourceInstance) throws InterceptionException {
//TODO - Faz alguma coisa caso o metodo accepts retorne false. Redireciona para algum outro lugar.. uma tela de login por exemplo
//result.redirectTo(AppController.class).login();
}
@Override
public boolean accepts(ResourceMethod method) {
return !loginSession.isUsuarioLogado() && method.containsAnnotation(RestritoApenasAdmins.class);
}
}
Espero ter ajudado. 