2017-06-13 71 views
-1

我正在努力使我的Spring Security配置正確完成。 我有JWT安全設置,但我希望它只能在/api**上工作,並且我無法正確完成...即使當我嘗試點擊localhost:8080時,我也收到了來自JWTFilter的錯誤。Spring Security將篩選器應用於所有路徑,而不僅僅是「/ api **」

這是我的配置:

public static final String TOKEN_BASED_AUTH_ENTRY_POINT = "/api/**"; 
    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
       .csrf().disable() 
       .addFilterBefore(new CORSFilter(), ChannelProcessingFilter.class) 
       .exceptionHandling() 
        .authenticationEntryPoint(this.restAuthEntryPoint) 
        .and() 
       .sessionManagement() 
        .sessionCreationPolicy(SessionCreationPolicy.STATELESS) 
        .and() 
       .authorizeRequests() 
        .antMatchers(HttpMethod.OPTIONS, "**").permitAll() 
        .antMatchers(FORM_BASED_REGISTRATION_ENTRY_POINT).permitAll() 
        .antMatchers(FORM_BASED_LOGIN_ENTRY_POINT).permitAll() 
        .and() 
       .authorizeRequests() 
        .antMatchers(TOKEN_BASED_AUTH_ENTRY_POINT).authenticated() 
        .and() 
       .addFilterBefore(buildJWTLoginFilter(), UsernamePasswordAuthenticationFilter.class) 
       .addFilterBefore(buildJWTAuthFilter(), UsernamePasswordAuthenticationFilter.class); 
    } 

理論上它應該只對API應用過濾器,但它在某種程度上適用他們的所有路徑。

有人可以幫助使其工作,因爲它應該工作,所以只有/api**將被保護,我可以自由訪問/api以外的所有路徑?

+1

.antMatchers(HttpMethod.GET,TOKEN_BASED_AUTH_ENTRY_POINT).permitAll()可能是你應該精確允許列舉HTTPMethod –

+0

什麼?您只複製了我的代碼的一行...登錄和註冊工作正常 –

+0

您爲什麼認爲,您的配置只適用於'/ api **'?你沒有限制它。默認情況下,你的配置適用於'/ **'。你爲什麼認爲你的過濾器只適用於'/ api **'?顯示你的過濾器的代碼,我想你沒有實施限制。 – dur

回答

-1

添加and().antMatchers("/**").permitAll()

相關問題