2017-06-02 124 views
0

我使用的是春季啓動,對於彈簧安全性來說很新,但我希望我的Web應用程序具有基本的安全性。我所做的是增加我的pom.xml所需的依賴,並將此Java類到我的項目:春季安全 - 不訪問數據庫

@Configuration 
@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

@Autowired 
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 

    auth 
      .inMemoryAuthentication() 
      .withUser("user").password("password").roles("USER"); 
} 

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http.authorizeRequests() 
      .antMatchers("/**","/event/**","/ticket/**") 
      .hasRole("USER") 
      .and() 
      .formLogin(); 
} 

}

運行我的Web應用程序後,我遇到了登錄頁面,在這裏我把用戶/密碼,然後轉到我的Web應用程序。但是,這些命令不起作用。我正在推送一些按鈕,它們會將信號發送到我的MySql數據庫,但沒有任何反應。這就像前端沒有連接到後端。我在前端使用AngularJS,在頁面之間導航的View Controller。其他應用程序是基於REST的。任何想法爲什麼會發生?

後來編輯:現在我明白了,我的問題是驗證後,我的終端上有403個狀態碼。任何想法我可以修復它?我的POST請求沒有得到授權,我的GET請求可以正常工作......以下是我的一些POST端點:/ event/buy_ticket/{id},/ ticket// cancel_ticket/{ID}

angular.min.js:101 POST http://localhost:8080/event/buy_ticket/2 403() 

我甚至想明確地說,它允許它,但我仍然得到403 ...

http.authorizeRequests() 

.antMatchers("/**","/event/**","/ticket/**","/event/buy_ticket/2") 
      .permitAll() 
      .and() 
      .formLogin(); 

後來後來的後來編輯:

禁用CSRF工作

+0

不,驗證碼有效。問題隨之而來,當我在頁面上做事情時什麼都沒有發生 – Gimv13

+0

你是否從你的api端點獲得了403個響應? –

+1

是的,我得到403 – Gimv13

回答

1

獲取403禁止的錯誤代碼意味着Spring正在接收您的請求,但選擇停止處理它們。從Wiki頁面上HTTP 403

認證是提供的,而是通過驗證的用戶是不是 允許執行請求的操作。

如果我不得不下注,我會說問題在於你沒有指定應該訪問哪些資源和端點以及如何訪問。如果內存爲我服務,Spring Security默認會將所有內容鎖定得超級緊密,因此您需要明確告訴它應該打開什麼。下面是我自己的安全配置示例:

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

    http 
    .authorizeRequests() // require authorization 
    .antMatchers(HttpMethod.OPTIONS, "/**").permitAll() // for the CORS preflight check 
    .antMatchers("/login", "/api/open/**", "/resources/**").permitAll() // the open API endpoints and resources 
    .antMatchers("/logout", "/api/secured/**").authenticated(); // lock down these endpoints 

    ...additional configurations... 
} 

所有終端,應該是免費提供與"/api/open/"的開頭,而應該由春季安全的保護所有端點與"/api/secured/"開頭。例外是註銷和登錄端點,因爲它們直接綁定到Spring Security。

這是一個偉大的blog post - 以及相關repo - ,展示瞭如何實現Spring Security的播放與AngularJS不錯,甚至作爲一個單頁應用程序,這是衆所周知的惱人的安全。

編輯:您可能會遇到CSRF保護,它在默認情況下在Spring Security中啓用 - 請參閱此post。CSRF將允許GET,HEAD和OPTION等HTTP安全方法,但如果這些方法沒有提供正確的標記,則會阻止PUT,POST,DELETE等「不安全」方法(因爲沒有配置CSRF,所以這些請求不會令牌 - >阻止)。出於測試目的,您可以通過將http.csrf().disable()添加到configure()方法來禁用它。

+1

是的,這是csrf。非常感謝你 :) – Gimv13