secured preauthorize multiple method jsr250enabled hasrole examples enableglobalmethodsecurity custom java spring rest spring-security jersey

java - preauthorize - spring security method



Utilizando @PreAuthorize o @Secured con Jersey al usar la clase de configuraciĆ³n (1)

Tengo un problema similar al de la anotación PreAuthorize que no funciona con jersey . Creé una clase de configuración para Spring Security y la autenticación funciona pero la autorización no.

Aquí está mi código

SpringSecurityConfig.java

@Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) @Order(1) @ComponentScan({"com.foo.rest.resources.Template"}) public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { private final UserService userService; private final TokenAuthenticationService tokenAuthenticationService; public SpringSecurityConfig() { super(true); this.userService = new UserService(); tokenAuthenticationService = new TokenAuthenticationService("tooManySecrets", userService); } @Override protected void configure(HttpSecurity http) throws Exception { http .exceptionHandling().and() .anonymous().and() .servletApi().and() .headers().cacheControl().and() .authorizeRequests() // Allow anonymous logins .antMatchers("/auth/**").permitAll() // All other request need to be authenticated .anyRequest().authenticated().and() // Custom Token based authentication based on the header previously given to the client .addFilterBefore(new StatelessAuthenticationFilter(tokenAuthenticationService), UsernamePasswordAuthenticationFilter.class); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService()).passwordEncoder(new BCryptPasswordEncoder()); } @Bean @Override public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } @Bean @Override public UserService userDetailsService() { return userService; } @Bean public TokenAuthenticationService tokenAuthenticationService() { return tokenAuthenticationService; } }

y Template.java

@Component @Path("/template") @Produces(MediaType.APPLICATION_JSON) public class Template { @GET @Secured("ROLE_EDITOR") public User getTemplate() { return new Template(); } }

Supongo que la autenticación se maneja en la cadena de filtros, pero nunca vuelve a aparecer después de que se alcanza la etiqueta de autorización. ¿Alguna idea de cómo hacer que esto funcione?


Creo que su @ComponentScan está configurado incorrectamente y no selecciona el recurso de Template correctamente.

De acuerdo con la documentación de @ComponentScan , el valor es un alias para basePackages pero usted ha dado una clase en lugar de paquete. Intenta cambiarlo para que parezca seguir y ver.

@ComponentScan({"com.foo.rest.resources.*"})

Y asegúrese de no haber omitido ningún paso en la integración de Jersey Spring según la documentación