2017-08-29 9 views
1

私はスプリングブートアプリケーションからのコントローラ要求に関して問題があります。コントローラのリクエストはhttpsとhttpで正常に動作します。 httpsでのみ動作するはずです

httpsでアプリを実行するための証明書を作成しました。証明書は正常に動作し、有効です。

私の主な問題は、コントローラから投稿者(URL要求)がhttpsとhttpで正常に動作することをテストするときです。http://で動作しません。誰かがこれを助けることができますか?

これは私のWebSecurityConfigクラスです:

@Configuration 
@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private AuthenticationManager authenticationManager; 

    public static final String AUTHENTICATED_HEADER_NAME = "Authenticated"; 
    public static final String AUTHENTICATED_TRUE = "true"; 
    public static final String AUTHENTICATED_FALSE = "false"; 

    @Autowired 
    public void globalUserDetails(final AuthenticationManagerBuilder auth) throws Exception { 
     PasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); 

     auth.userDetailsService(authenticationManager).passwordEncoder(passwordEncoder); 
    } 


    @Override 
    @Bean(value = "authenticationManagerBean") 
    public org.springframework.security.authentication.AuthenticationManager authenticationManagerBean() throws Exception { 
     return super.authenticationManagerBean(); 
    } 

    @Configuration 
    @Order(1) 
    public static class HTTPBasicSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter { 

     //todo check how we can change the root url of swagger 
     @Override 
     public void configure(WebSecurity web) throws Exception { 
      web.ignoring().antMatchers("/documentation**", "/configuration/**", "/v2/api-docs**", "/swagger-ui.html", "/webjars/**", "/swagger-resources/**"); 
     } 

     @Override 
     protected void configure(HttpSecurity http) throws Exception { 
      //todo http basic allows access to all urls after login 
      http 
        .httpBasic() 
        .and() 
        .csrf().disable() 
        .antMatcher("/api/**") 
        .authorizeRequests() 
        .antMatchers("/login").permitAll() 
        .anyRequest() 
        .authenticated(); 

     } 
    } 

    @Configuration 
    @Order(2) 
    public static class FormLoginSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter { 

     @Override 
     protected void configure(HttpSecurity http) throws Exception { 
      http.csrf() 
        //todo more investigation is required to check if it is safe to ignore csrf for login 
        .ignoringAntMatchers("/login") 
        .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) 
        .and() 
        .authorizeRequests() 
        .antMatchers("/login").permitAll() 
        .anyRequest().authenticated() 
        .and() 
        .formLogin() 
        .permitAll() 
        .successHandler((httpServletRequest, httpServletResponse, authentication) -> { 
         httpServletResponse.setHeader(AUTHENTICATED_HEADER_NAME, AUTHENTICATED_TRUE); 
        }) 
        .failureHandler((httpServletRequest, httpServletResponse, e) -> { 
         httpServletResponse.setHeader(AUTHENTICATED_HEADER_NAME, AUTHENTICATED_FALSE); 
         httpServletResponse.setStatus(SC_UNAUTHORIZED); 
        }) 
        .and() 
        .logout().permitAll() 
        .and() 
        .addFilterBefore(new CorsFilter(), ChannelProcessingFilter.class) 
        .addFilterBefore(new CsrfHeaderFilter(), CsrfFilter.class); 
      http.exceptionHandling().authenticationEntryPoint((HttpServletRequest request, HttpServletResponse response, 
                   AuthenticationException authException) -> { 
       if (authException != null) { 
        response.setStatus(SC_UNAUTHORIZED); 
       } 
      }); 
     } 
    } 

    @Configuration 
    @Order(3) 
    public static class TestClass extends WebSecurityConfigurerAdapter { 

     @Override 
     protected void configure(HttpSecurity http) throws Exception { 

      http.headers() 
        .httpStrictTransportSecurity() 
        .includeSubDomains(true) 
        .maxAgeInSeconds(31536000); 
     } 
    } 
} 

、これが私の春ブーツバージョンです

<parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.2.RELEASE</version> 
     <relativePath></relativePath> 
</parent> 
+0

p.s. SSLが有効になっています –

+0

httpで動作しないのはなぜですか?無効にしていない限り、どちらのコネクタでも動作します。 –

+0

まあ...どのように私はhttpで動作するように無効にすることができますか?私はそれがhttps –

答えて

0

あなたの質問はいくつかの点に触れている:

  • あなたがするクライアントを必要とすることができますsecurity.require_ssl=true構成プロパティを追加することにより、安全なチャネルが必要です(the Spring Boot reference documentation about HTTPS
  • または次の構成スニペットhttp.requiresChannel().anyRequest().requiresSecure();
  • あなたは上記の私がしていた状況を助けたのHSTS in Spring Security
+0

それは動作しません...それはまだhttpで実行されます –

+0

あなたはあなたの質問でもう少し詳しく説明できますか?あなたはSpringセキュリティを使用していますか?あなたの設定を表示できますか?どのSpringブートバージョンを使用していますか? –

+0

私は1.4.2.RELEASEバージョンのスプリングブートを使用しています。 –

0

なしと同様にすることを強制することがありますを使用しています。 私は考え出したそのクロム(郵便配達)が自動的にHTTPリクエストをhttpsに変換していました。 他のブラウザでは、httpリクエストが機能しませんでした。

関連する問題