2017-02-22 26 views
1

我想添加到現有的Spring REST API項目中,以便WebSecurityConfigurerAdapter對其進行測試。但是,當彈簧啓動時,它不會加載配置。也許我需要將它添加到應用程序上下文中,但我不知道如何去做。如何將Spring WebSecurityConfig添加到現有項目

如果我做一個curl localhost:8080/總是得到未經授權的響應,所以我認爲這不是加載配置,爲什麼它是?或者,我應該如何加載它? 在github上看到的所有多樣化項目中,他們從不做特殊的事情來加載它!它可能是因爲它首先加載了一個embeded servlet?

這是簡單的web安全配置:

@SuppressWarnings("SpringJavaAutowiringInspection") 
@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(prePostEnabled = true) 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

@Autowired 
private UserDetailsService userDetailsService; 

@Autowired 
public void configureAuthentication(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception { 
    authenticationManagerBuilder 
      .userDetailsService(this.userDetailsService) 
      .passwordEncoder(passwordEncoder()); 
} 

@Bean 
public PasswordEncoder passwordEncoder() { 
    return new BCryptPasswordEncoder(); 
} 

@Override 
protected void configure(HttpSecurity httpSecurity) throws Exception { 
    httpSecurity 
      // we don't need CSRF because our token is invulnerable 
      .csrf().disable() 

      // don't create session 
      .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() 

      .authorizeRequests() 
      //.antMatchers(HttpMethod.OPTIONS, "/**").permitAll() 

      // allow anonymous resource requests 
      .antMatchers(
        HttpMethod.GET, 
        "/", 
        "/*.html", 
        "/favicon.ico", 
        "/**/*.html", 
        "/**/*.css", 
        "/**/*.js", 
        "/**" 
      ).permitAll() 
      .antMatchers("/auth/**").permitAll() 
      .anyRequest().authenticated(); 

    // disable page caching 
    httpSecurity.headers().cacheControl(); 
} 
} 

這是我的應用

@Configuration 
@EnableConfigurationProperties 
@ComponentScan(basePackageClasses = SimpleCORSFilter.class) 
@EnableAutoConfiguration org.springframework.boot.actuate.autoconfigure.ManagementSecurityAutoConfiguration.class}) 
@EntityScan(basePackages = "com.thing.model") 
@RestController 
public class Application { 


    @Bean 
    public FilterRegistrationBean filterRegistrationBean() { 
     FilterRegistrationBean registrationBean = new FilterRegistrationBean(); 
     CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter(); 
     registrationBean.setFilter(characterEncodingFilter); 
     characterEncodingFilter.setEncoding("UTF-8"); 
     characterEncodingFilter.setForceEncoding(true); 
     registrationBean.setOrder(Integer.MIN_VALUE); 
     registrationBean.addUrlPatterns("/*"); 
     return registrationBean; 
    }  




    public static void main(String[] args) { 
       SpringApplication application = new SpringApplication(Application.class); 
     SpringApplication.run(Application.class, args); 
    } 

    @RequestMapping("/") 
    public String home() { 
      return "Hello World"; 
    } 

的pom.xml依賴

 <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-jpa</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-tomcat</artifactId> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-actuator</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.geotools</groupId> 
     <artifactId>gt-referencing</artifactId> 
     <version>8.2</version> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>org.jsoup</groupId> 
     <artifactId>jsoup</artifactId> 
     <version>1.7.2</version> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>org.postgresql</groupId> 
     <artifactId>postgresql</artifactId> 
     <version>9.3-1102-jdbc41</version> 
    </dependency> 
    <dependency> 
     <groupId>org.yaml</groupId> 
     <artifactId>snakeyaml</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-security</artifactId> 
    </dependency> 

回答

0

我需要添加WebSecurityConfig到應用程序上下文添加t他在主類報關行:

... 
@Import(WebSecurityConfig.class) 
public class Application { 
... 

另一件事,我所做的是升級SpringBoot到1.4.3.RELEASE,把主應用程序的根文件夾:

<parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.3.RELEASE</version> 
     <relativePath/> <!-- lookup parent from repository --> 
    </parent> 

樹會,例如:

└── com 
└── app 
    ├── Application.java 
    └── config 
     └── WebSecurityConfig.java 

這會自動將所有@Configuration加載到子文件夾中。

0

看看這個example瞭解如何在Spring項目中啓用網絡安全。

相關問題