A anotação PreAuthorize não funciona com jersey
-
21-12-2019 - |
Pergunta
Estou tentando proteger um serviço de jersey usando anotações de segurança do Spring, sem sorte.
Adicionei esta seção ao web.xml:
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.test.proj.ui.web.rest;com.fasterxml.jackson.jaxrs</param-value>
</init-param>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.test.commons.ui.web.jersey.RestApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Também habilitei as anotações pré-pós usando isto no applicationContext:
<global-method-security secured-annotations="enabled" pre-post-annotations="enabled" />
E esta é minha classe de serviço:
@Component
@Path("/user/{uid: .*}")
public class UserResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
@PreAuthorize("hasRole('ROLE_MANAGE_USER')")
public Response getUserDetail(@PathParam("uid") String uid) {
return "Hi, this is a test";
}
}
A segurança Spring funciona bem na autenticação, mas a autorização não funciona conforme o esperado e ignora a anotação PreAuthorize sem nenhum erro ou log.
Estou usando Spring 3.2.4 e Spring Security 3.2.1 e Jersy 2.6.
qualquer ideia?
obrigado
Solução 2
A verificação do componente da mola não foi configurada corretamente!Para resolver o problema, adicione apenas a digitalização componente corretamente e funciona.
Outras dicas
Nós estávamos enfrentando exatamente o mesmo problema.Na camada de negócios @Preatorize Anotação trabalhada, mas no recurso de repouso não.O efeito colateral dessa situação foi que a injeção de feijão de primavera também não funcionou.Tudo sem qualquer erro.
A solução de trabalho de 100% era usar o restaurante em vez de Jersey.Eles são bastante semelhantes, então não foi muito trabalho.