Preauthorize Annotation non funziona con Jersey
-
21-12-2019 - |
Domanda
Sto cercando di proteggere un servizio di jersey usando le annotazioni di sicurezza di primavera senza fortuna.
Ho aggiunto questa sezione su 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>
.
Abilitato anche le pre-post-annotazioni utilizzando questo su ApplicationContext:
<global-method-security secured-annotations="enabled" pre-post-annotations="enabled" />
.
E questa è la mia classe di servizio:
@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";
}
}
.
La sicurezza della molla funziona bene nell'autenticazione, ma l'autorizzazione non funziona come previsto e ignora l'annotazione preauthorize senza alcun errore o registro.
Sto usando la molla 3.2.4 e la sicurezza della molla 3.2.1 e Jersy 2.6.
Qualche idea?
Grazie
Soluzione 2
La scansione del componente a molla non è stata configurata correttamente!Per risolvere il problema, aggiungere correttamente la scansione del componente e funziona.
Altri suggerimenti
Stiamo affrontando esattamente lo stesso problema.Sull'attività di affari @preauthorize l'annotazione ha funzionato ma sulla risorsa di riposo no.L'effetto collaterale di questa situazione era che l'iniezione di fagioli a molla non funzionava anche.Tutto senza errori.
La soluzione di lavoro al 100% era usare il restaggio invece di Jersey.Sono abbastanza simili quindi non era molto lavoro.