Ich folge Spring Security and Angular JS für HTTP-Basic-Authentifizierung, durch Hinzufügen Authorization-Header zu $ HTTP-Header nicht vorhanden ist:Spring Security nicht Fehler auslösen, wenn Autorisierungsheader nach dem Login mit AngularJS
const headers = {
authorization: "Basic " + btoa(this.login + ":" + this.password)
};
this._$http.get("user",
{
headers: headers,
})
.then(
this.showUser.bind(this),
this.showError.bind(this)
);
Innen showUser
ich umleiten zu jobs
Komponente mit $location
:
this._$location.path("jobs");
Und innerhalb jobs
Komponente, lade ich zur Verfügung stehenden Arbeitsplätze:
public $onInit() {
this._$http.get("jobs").then(function(response) {
this.jobs = response.data;
}.bind(this));
this.authenticated = this._loginService.isLogged();
}
Absichtlich ohne Autorisierung Header, zu beweisen, dass alles funktioniert. Ich dachte, es sollte durch Spring Security
mit HTTP 401 Unauthorized
oder so etwas aufgegeben werden, aber es funktionierte ohne Autorisierung Header. Wenn ich mich aus einem anderen Browserfenster abmelde und Jobs neu lade, ist es in Ordnung, Jobs werden nicht geladen. Aber ich denke (und ich hoffe) Autorisierungsdaten (HTTP Basic) sollten in jeder Anfrage vorhanden sein. Hier ist meine Sicherheitskonfiguration:
protected void configure(HttpSecurity http) throws Exception {
http
.formLogin()
.successHandler(
new DifferentRoleBasedStartingURLsAuthenticationSuccessHandler()
)
.and()
.logout()
.logoutUrl("/logout")
.and()
.httpBasic()
.and()
.authorizeRequests()
.antMatchers("/jobs/**").authenticated()
.antMatchers("/interviews/**").authenticated()
.anyRequest().permitAll()
.and()
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
;
Vielleicht habe ich hier einen Fehler gemacht. Ich denke, Regel .antMatchers("/jobs/**").authenticated()
sollte jobs/
auch authentifiziert werden. Kannst du mir helfen? Vielen Dank im Voraus.
UPDATE 2016.07.31: Vielleicht mit kantiger Genehmigung Header werden nicht bei jeder Anfrage im Frühjahr benötigt? Mein Repo ist hier: Playground for Spring and Angular (AngularJS branch), Passwort ist test
für jeden erstellten Benutzer.
Warum gibt es ein Formular Login, wenn Sie http Standardauthentifizierung zu verwenden sind versuchen? Beachten Sie auch, dass die Formularanmeldung im Frühjahr auf Cookies basiert. Vielleicht erhalten Sie deshalb nicht die Ergebnisse, die Sie erwarten. Ihr authorizeRequests() -Abschnitt ist korrekt. Das Tutorial, auf das Sie verweisen, konfiguriert auch nicht das Formular-Login, daher bin ich mir nicht sicher, warum es da ist. – Pieter
@Pieter, wenn ich es entferne, wird es funktionieren? Entschuldigung, dass ich frage, ich kann es jetzt nicht überprüfen. –