2012-08-16 13 views
6

I Spring Security Expression in meiner Anwendung Frühlings-Controller implementiert haben:Frühling Sicherheit ohne Form Login

@Controller 
@RequestMapping("init") 
public class InitController { 
    @PreAuthorize("hasRole('ROLE_ADMIN')") 
    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public @ResponseBody String home(){ 
     return "This is the init page"; 
    } 
} 

Mit dieser Sicherheitskonfiguration:

<http auto-config="true" create-session="stateless" use-expressions="true"> 
    <intercept-url pattern="/_ah*" access="permitAll" /> 
    <intercept-url pattern="/init/*" access="hasRole('ROLE_ADMIN')"/> 
    <intercept-url pattern="/init*" access="hasRole('ROLE_ADMIN')"/> 
</http> 

Wenn diese Ressource zugegriffen wird, die die Standard-Frühlings-Login-Formular angezeigt wird (http://localhost:8888/spring_security_login), aber ich möchte nicht, dass dies passiert und ich möchte nur die Anmeldeinformationen in den Anfrage-Header wie "x-Autorisierung-Schlüssel" oder was auch immer das Szenario passt.

Was ist die mögliche Lösung dafür?

  • Ist es ein gutes haben, nur die x-berechtigungs Schlüssel in der Anfrage sein
  • Wenn ja, wie es mit dem Spring-Sicherheitsmechanismus passt, das ist, wie, dass es passt mit dem „hasRole "Ausdruck
  • Es ist wichtig, das die mein Web-Service staatenlos ist, und jede Anfrage wird
  • Schließlich authentifiziert, wie viel mit Frühlings-Sicherheit zu tun, ohne
  • mit dem Spring-Login-Formular beschäftigen

Kopf

Antwort

8

Sie sollten wahrscheinlich die Beschreibung auf what auto-config does lesen, dann entfernen Sie es, um form-login zu deaktivieren. Ihre Konfiguration wird klarer, wenn Sie speziell konfigurieren, was Sie verwenden möchten.

Es ist nicht klar aus Ihrer Frage, was Sie in der x-authorization-key-Header enthalten möchten. Wenn Sie sich nur mit einer Client-ID und einem gemeinsamen Schlüssel authentifizieren, können Sie auch die Standardauthentifizierung verwenden, da sie bereits standardmäßig unterstützt wird und Sie einfach <http-basic /> zu Ihrer Konfiguration hinzufügen können. Wenn Sie etwas mehr angepasst haben, müssen Sie wahrscheinlich einen benutzerdefinierten Filter und implementieren, um die Anmeldeinformationen zu extrahieren und sie zu verarbeiten.

Wie Ihr Authentifizierungsmechanismus passt, hängt auch davon ab, woraus er besteht. Normalerweise haben Ihre Benutzer Rollen zugewiesen, die bei der Authentifizierung geladen werden, normalerweise aus einer Datenbank. Der Ausdruck hasRole prüft einfach, ob der aktuelle Benutzer die angegebene Rolle hat. Oft müssen Sie nur eine UserDetailsService erstellen, die Ihre Benutzerinformationen in einem Standardformat lädt, das einfach in das Framework eingesteckt werden kann. Dies wird an anderer Stelle ausführlich behandelt. Wenn Sie wirklich etwas angepassteres brauchen this blog article auf GAE-Integration enthält Details, wie Sie über die Integration mit einem komplizierteren System gehen könnte.

Spring Security wird not create or use a session, wenn Sie create-session='stateless' verwenden.

P.S. Sie müssen nicht unbedingt dieselben Sicherheitsattribute auf URL-Ebene und auf Ihrem Controller angeben, der dieselbe URL verarbeitet.

Verwandte Themen