2015-09-23 125 views
1

目的我的問題是要瞭解並得到清晰的安全/會話如何在春季工作的圖片。因爲我對Spring的概念很陌生。 我跟着這個教程瞭解彈簧安全如何工作

https://spring.io/guides/tutorials/spring-security-and-angular-js/

我的目標是:當某些資源的用戶請求(例如/順序/細節。),如果該請求在頭中沒有標記,那麼它應該被重定向到帶有新令牌的登錄頁面。

@EnableWebSecurity 
@Configuration 
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER) 
public class Config extends WebSecurityConfigurerAdapter { 

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

     http.httpBasic().and().authorizeRequests().antMatchers("/*") 
       .permitAll().anyRequest().authenticated().and().csrf() 
       .csrfTokenRepository(csrfTokenRepository()).and() 
       .addFilterAfter(csrfHeaderFilter(), CsrfFilter.class); 

    } 

    private Filter csrfHeaderFilter() { 
     return new OncePerRequestFilter() { 
      @Override 
      protected void doFilterInternal(HttpServletRequest request, 
        HttpServletResponse response, FilterChain filterChain) 
        throws ServletException, IOException { 
       CsrfToken csrf = (CsrfToken) request 
         .getAttribute(CsrfToken.class.getName()); 
       if (csrf != null) { 
        Cookie cookie = WebUtils.getCookie(request, "XSRF-TOKEN"); 
        String token = csrf.getToken(); 
        if (cookie == null || token != null 
          && !token.equals(cookie.getValue())) { 
         cookie = new Cookie("XSRF-TOKEN", token); 
         cookie.setPath("/"); 
         response.addCookie(cookie); 
         response.sendRedirect("/login"); 
        } 
       } 
       filterChain.doFilter(request, response); 
      } 
     }; 
    } 

    private CsrfTokenRepository csrfTokenRepository() { 
     HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository(); 
     repository.setHeaderName("X-XSRF-TOKEN"); 
     return repository; 
    } 
} 

上面的代碼工作正常,但關於重定向到登錄頁面,我無法實現它。

請幫我理解這裏的概念。如果你需要更多的細節,請讓我知道。

謝謝

+0

你到底想做什麼?告訴我。我在這工作了一段時間! –

+0

我正在更新我的代碼,請參閱這個 – Roxy

+0

無論您想要實現什麼,Spring-Security都已經有機制來實現這一點。我可以說,你讓事情變得複雜。請參閱指南並進行配置。另外,請嘗試正確解釋問題所在。我已經失去了第3段的內容。 –

回答

0

我幾個星期前在你的地方。我不得不將安全性融入到春季項目中,並且我對春季和安全都很陌生。 這是我做的。

  1. 通過相當多的安全瀏覽過的構架
  2. 瞭解到什麼是認證模塊的認證模塊等
  3. 我碰到KeyCloak來到一點點。我曾與它的1.4版
  4. 在本地安裝keycloak並建立
  5. 配置我的keycloak適配器springboot應用領域(你可以找到所有關於它keycloak文檔中)
  6. ,就是這樣。我能夠使用json文件和一個xml配置文件來保護我的web應用程序並保留api。

看看它。 我不是安全或彈簧方面的專家。只是分享我所做的最近的工作。