2017-06-19 30 views
0

我有表單登錄工作的高度爲瀏覽器用戶登錄:春季安全配置2種登錄行爲 - Ajax響應JSON和表單登錄重定向新的一頁

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http.csrf().disable().cors()             
     .and().authorizeRequests() 
     .antMatchers("/api/**").authenticated()          
     .anyRequest().permitAll()              
     .and().formLogin().loginPage("/login").failureUrl("/login?error")    
     .usernameParameter("username").passwordParameter("password")     
     .successHandler(loginSuccessConfig) 
     .failureHandler(loginFailureConfig)   
     .and().logout().logoutUrl("/logout")           
     .logoutSuccessHandler(logoutSuccessConfig) 
     .logoutSuccessUrl("/index"); 
} 

但我喜歡通過AJAX另一種登錄並響應JSON而不是重定向到另一個頁面。 我可能知道可能有另一個登錄路徑「/ api/login」,因爲successHandler和failureHandler無法區分應該提供哪種響應,因爲沒有某種指示器可以提供。

希望有人可以在此指導。 謝謝。

回答

0

試想只需在登錄表單或阿賈克斯

<input type="hidden" name="responseJson" value="true"/> 

提交其他參數劈然後,在擴展了「SimpleUrlAuthenticationFailureHandler」級(其它任何你喜歡的),裏面覆蓋「onAuthenticationFailure」的方法,此方法得到param調用「HttpServletRequest」,檢查如下:

String responseJson = request.getParameter("responseJson"); 
if (responseJson != null && responseJson.equals("true")){ 
    response.setContentType("text/json"); 
    PrintWriter out = response.getWriter(); 
    out.print(jsonObjectAboutFailLogin.toString()); 
    out.flush(); 
}