2017-02-22 19 views
1

Я хочу добавить к существующему проекту REST для REST Spring просто конфигурацию для WebSecurityConfigurerAdapter для ее проверки. Но когда весна начинается, она не загружает конфигурацию. Возможно, мне нужно добавить его в контекст приложения, но я не знаю, как это сделать.Как добавить Spring WebSecurityConfig к существующему проекту

Если я делаю curl localhost:8080/, всегда получаю несанкционированный отклик, поэтому я думаю, что это не загрузка конфигурации, почему это так? Или, как я должен его загрузить? Во всех разнообразных проектах, которые я видел на github, они никогда не делают особых вещей, чтобы загрузить его! Может быть, потому, что сначала загружает запечатленный сервлет?

Это простая конфигурация веб-безопасности:

@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.

Смежные вопросы