2017-04-06 4 views
0

Ich muss einen JHipster (Spring Security/AngularJS) Benutzer authentifizieren, nachdem eine reguläre GET Anfrage vom Browser gemacht wurde, und dann zur AngularJS App umleiten (für OpenID Authentifizierung))Programmgesteuertes Anmelden bei Spring Security und Authentifizieren auf 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/#/"); 
} 

nach der Umleitung zu „http://localhost:8080/#/“ gemacht wird, kommt die Antwort-Header mit einem JSESSIONID, aber ich weiß nicht, ob das das Token ist, dass ich (das ist die „user“ authentifizierte Token müssen?) und es bleibt nicht in den Browser-Cookies (vielleicht wegen der Umleitung?)

Wenn ich mich mit dem Standard JHipst anmelden er AngularJS Benutzername/Passwort Form, kommt die Antwort-Header mit

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 

I denkt hier die Lösung programmatisch sein würde, den Benutzer anmelden, einen gültigen JSESSIONID Token erhalten, und es im Browser als Cookie während gesetzt/nachdem ich den Location Header zur Umleitung benutzt habe, habe ich Probleme mit diesen Schritten. Jede Hilfe wird geschätzt.

Antwort

1

Eigentlich diese Linie war nicht wirklich Authentifizierung die Art, wie ich es wollte:

Authentication auth = new UsernamePasswordAuthenticationToken(user, null); 

Die JSESSIONID gesetzt wurde, aber nach einer fehlgeschlagenen Authentifizierung bei einer Anforderung es zerstört wurde.

ich dies geändert:

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

durch einen anderen Konstruktor es nun korrekt authentifiziert wird.

0

JHipster bietet sofort die OpenID-Authentifizierung ('Social Login' genannt) und ist viel komplizierter als 'reguläre GET-Anfrage', daher ist es wahrscheinlich die beste Lösung, mit einer bestehenden Vorlage zu beginnen anstatt Ihre eigene zu erstellen.

Als nächstes werden 'JSESSIONID' Cookie und Request-Parameter nicht von JHipster oder Spring Security gesteuert/erstellt/geändert, dies ist auf Container-Ebene, Teil der Servlet-Spezifikation und wird vollständig vom Servlet-Container gesteuert, intern verwendet (einer der Fälle) um Session-Beans instanziieren/abzurufen. Sie sollten nicht versuchen, sie zu überschreiben.

Verwandte Themen