Eu tenho um aplicativo web trabalhando JavaEE 6 no Glassfish, este aplicativo já tem um frontend JSF e tem seu mecanismo de autenticação (usando CDI e segurança baseada em anotação) Então há uma canvas de login, usuário digite senha de nome de usuário, pressione o botão de login e Java EE o processo de autenticação é iniciado.
Agora eu quero “também” expor algumas das minhas classs de serviço como um serviço REST (provavelmente usarei Jersey), para que ele também possa ser acessado a partir de um dispositivo móvel. Mas o que me preocupa é a parte de login.
Usarei exatamente a mesma autenticação existente. Mas agora eu quero que meu aplicativo obtenha essas credenciais de uma Solicitação de Repouso, mas não da canvas de login. E então continue usando os methods de validação existentes que já existem (verifique a senha do nome de usuário do DB, etc)
Eu meio que me perdi como posso fazer isso, eu acho que eu preciso usar um desses filtros para interceptar o pedido e obter a senha do nome de usuário, mas não sei como e qual? Ou eu não preciso de nada assim?
Você pode proteger o serviço REST da mesma maneira que protege o serviço REST, por exemplo:
@Path("/foo") @RolesAllowed({"admin", "customer"}) public class Foo { @GET @Produces("text/plain") @RolesAllows("admin") public void adminOnly() {} public void adminOrCustomer() {} }
Eu acho que você já tem papéis e mapeamentos para eles, então use as mesmas funções que você, o servidor de aplicativos cuidará do resto.