2017-04-06 39 views
0

我需要一個正GET請求從瀏覽器發出後,來驗證JHipster(春季安全/ AngularJS)用戶,然後重定向到AngularJS應用(對於OpenID身份驗證)編程方式登錄和AngularJS認證(JHipster)

@GetMapping("/login") 
@Timed 
public void login(HttpServletResponse response) throws Exception { 
    User user = userRepository.findOneByLogin("user").get(); // For testing purposes 
    Authentication auth = new UsernamePasswordAuthenticationToken(user, null); 
    SecurityContextHolder.getContext().setAuthentication(auth); 

    response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); 
    response.setHeader("Location", "http://localhost:8080/#/"); 
} 

爲「http://localhost:8080/#/」是由重定向後,響應頭配備了JSESSIONID,但我不知道這是我需要的令牌(這是「用戶」身份驗證令牌?) ,它不會在瀏覽器中的cookies如果我登錄使用默認JHipst持續(或許是因爲重定向?)

呃AngularJS用戶名/密碼形式,響應頭自帶

Set-Cookie:XSRF-TOKEN=108cadcf-2005-4e36-b055-438d75dc1ce9; path=/ 
Set-Cookie:JSESSIONID=foVcxycPQbUgS6nviKG1ftXSIgnlgDJdtxEGCSGZ; path=/; HttpOnly 
Set-Cookie:remember-me=N2pNMGFRRGJENldhZWpQTGV2d1k6c3NOTkk1WWpnR28xcWRldDE2T3U; path=/; HttpOnly; Max-Age=2678400; Expires=Sun, 07-May-2017 07:40:16 GMT 

認爲在這裏的解決方案將是編程登錄的用戶,獲得有效的JSESSIONID令牌,並將其設置在瀏覽器中一個cookie,而/使用Location頭重定向,但我有這些步驟後麻煩。任何幫助表示讚賞。

回答

1

其實,這條線是不是真的驗證我想它的方式:

Authentication auth = new UsernamePasswordAuthenticationToken(user, null); 

的JSESSIONID是被設置,但在請求認證失敗後,它被摧毀。

我改變了這個:

Authentication auth = new UsernamePasswordAuthenticationToken(user, null, new ArrayList<GrantedAuthority>()); 

通過使用不同的構造函數現在是驗證正確。

0

JHipster提供OpenID身份驗證(稱爲「社交登錄」),它比「常規GET請求」複雜得多,因此最好的解決方案可能是從現有模板開始,而不是自己製作。

接着,「JSESSIONID」的Cookie和請求參數不控制/創建/ JHipster或春季安全改性,這是在容器的水平,servlet規範的一部分,並且由servlet容器完全控制,在內部使用(例之一)實例/獲取會話bean。你不應該試圖覆蓋它們。