Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

334
Views
Spring Boot: seguridad de Spring @ComponentScan o @Import

Generé una aplicación web Spring Boot usando Spring Initializr, usando el motor de plantilla integrado Tomcat + Thymeleaf, y el paquete como un archivo JAR ejecutable.

Tecnologías utilizadas:

Spring Boot 1.4.2.RELEASE, Spring 4.3.4.RELEASE, Thymeleaf 2.1.5.RELEASE, Tomcat Embed 8.5.6, Maven 3, Java 8

Tengo esta clase de seguridad.

 com.tdk.config /** * @author nunito * @version 1.0 * @since 4 mar. 2017 */ @Configuration @EnableWebSecurity @PropertySource("classpath:/com/tdk/config/app-${APP-KEY}.properties") public class SecurityConfig extends WebSecurityConfigurerAdapter { protected String loginPage = "/tdk/login"; @Override protected void configure(HttpSecurity http) throws Exception { http .formLogin() .loginPage(getLoginPage() ) .permitAll() .and() .authorizeRequests() .antMatchers("/mockup/**").permitAll() .antMatchers("/welcome/**").authenticated() .and() .logout() .permitAll() .logoutSuccessUrl("/index.html"); } @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth .inMemoryAuthentication() .passwordEncoder(new StandardPasswordEncoder()) .withUser("nunito").password("08c461ad70fce6c74e12745931085508ccb2090f2eae3707f6b62089c634ddd2636f380f40109dfb").roles("ADMIN").and() .withUser("nunito").password("4cfbf05e4493d17125c547fdba494033d7aceee9310f253f3e96c4f928333d2436d669d63a84fe4f").roles("ADMIN"); } public String getLoginPage() { return loginPage; } public void setLoginPage(String loginPage) { this.loginPage = loginPage; }

Usando este archivo de configuración

 @SpringBootApplication @ComponentScan(basePackages = "com.tdk.config") @EnableAutoConfiguration public class TdkCloudApplication { public static void main(String[] args) { SpringApplication.run(TdkCloudApplication.class, args); } }

Tengo un 404 dondequiera que accedo en la URL

Pero esta configuración todo está bien

 @SpringBootApplication @EnableAutoConfiguration @Import({SecurityConfig.class}) public class TdkCloudApplication { public static void main(String[] args) { SpringApplication.run(TdkCloudApplication.class, args); } }

Me gustaria saber la diferencia, porque para mi son dos formas diferentes de hacer exactamente lo mismo pensar

about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Esta es una explicación de @Import y @ComponentScan , esta no es una respuesta a su pregunta (porque no sé por qué no funciona con ComponentScan), más bien es una pista.

@Import se usa para importar otras configuraciones, por lo que si una clase se anota con @Configuration y hay algunos beans definidos allí, se importarán al contexto de la aplicación, por ejemplo

 @Configuration public class config{ @Bean public ClassA a(){ return new ClassA(); } } @Import({config.Class}) // import Bean for ClassA

@ComponentScan escanea todas las clases anotadas con @Component , @Service , @Repository y asigna un bean uno a uno a cada clase. p.ej

 @Component public class ClassB {} @ComponentScan // import Bean ClassB

Después de la versión 4.2 de Spring, @ComponentScan también puede escanear @Configuration como un componente. Entonces, en su caso, SecurityConfig también debe importarse al contexto como un componente pero no como una configuración.

Lo único que no entiendo del todo es cómo @Import activa la ejecución del código en SecurityConfig, por favor dé un comentario si alguien lo sabe.

about 4 years ago · Santiago Trujillo Report

0

Lo siento por la respuesta tardía. Pero podría ayudar a alguien. El paquete de "TdkCloudApplication" no está presente en la pregunta. Supongo que está en un paquete diferente al de "com.tdk.config". si este es el caso, entonces en la anotación @ComponentScan(), debe proporcionar el paquete de TdkCloudApplication y el paquete de "SecurityConfig"

como esto. @ComponentScan(basePackages = {"com.tdk.config", "packageName of TdkCloudApplication"}).

Es por @SpringBootApplication. por defecto buscará beans en ese paquete y sus subpaquetes. pero si anotamos la clase con @ComponentScan, entonces tenemos que proporcionar todos los paquetes que necesitamos, para que Spring verifique todas esas áreas.

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!