2017-04-24 3 views
1

Ich bin ein bisschen neu zu Apache Shiro und versuchen authcBasic zur Sicherung des Webservice zu verwenden.Apache Shiro Anmeldung

Ich brauche einen Webservice erstellen mit denen ich durch die Bereitstellung Benutzername und Passwort kann die Apache Shiro-Funktionen nutzen kann.

Jede Führung wird sehr

Antwort

1

geschätzt werden ich ein minimales Beispielanwendung mit Feder-Boot erstellt haben (wegen der „Feder“ Tag) und Shiro für Sie, die Sie here on GitHub finden. Die Beispielanwendung basiert auf der "hello world" RESTful web service with Spring application aus der Spring-Dokumentation. Ich habe Shiro es über these changes (GitHub commit) hinzugefügt:

Fügen Sie die shiro-spring Abhängigkeit pom.xml:

</dependencies> 
    [...] 
    <!-- Apache Shiro --> 
    <dependency> 
     <groupId>org.apache.shiro</groupId> 
     <artifactId>shiro-spring</artifactId> 
     <version>1.3.2</version> 
    </dependency> 
</dependencies> 

Kopieren shiro.ini vom Shiro docs zu Ressourcen:

# ============================================================================= 
# Tutorial INI configuration 
# 
# Usernames/passwords are based on the classic Mel Brooks' film "Spaceballs" :) 
# ============================================================================= 

# ----------------------------------------------------------------------------- 
# Users and their (optional) assigned roles 
# username = password, role1, role2, ..., roleN 
# ----------------------------------------------------------------------------- 
[users] 
root = secret, admin 
guest = guest, guest 
presidentskroob = 12345, president 
darkhelmet = ludicrousspeed, darklord, schwartz 
lonestarr = vespa, goodguy, schwartz 

# ----------------------------------------------------------------------------- 
# Roles with assigned permissions 
# roleName = perm1, perm2, ..., permN 
# ----------------------------------------------------------------------------- 
[roles] 
admin = * 
schwartz = lightsaber:* 
goodguy = winnebago:drive:eagle5 

konfigurieren ShiroFilter, SecurityManager mit IniRealm und Shiro annotations in Application.java (angepasst von here):

hinzufügen @RequiresRoles Anmerkung mit dem Parameter "admin" zu GreetingController zu Testzwecken:

@RestController 
public class GreetingController { 

     private static final String template = "Hello, %s!"; 
     private final AtomicLong counter = new AtomicLong(); 

     @RequestMapping("/greeting") 
     @RequiresRoles(value = {"admin"}) 
     public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) { 
      return new Greeting(counter.incrementAndGet(), 
           String.format(template, name)); 
     } 
} 

Verwenden Sie die folgenden Befehle, um die Anwendung zu prüfen und auszuführen:

git clone https://github.com/opncow/gs-rest-service.git 
cd gs-rest-service/complete/ 
./mvnw spring-boot:run 

Stellen Sie sicher, dass Shiro ist Arbeits (HttpRequester oder ähnliche Plugin verwenden Sie die folgenden Anfragen erstellen):

User "root" (hat "admin" Rolle) mit dem Passwort "secret" (Base64 codierte Benutzername: Passwort als Wert des Authorization-Header)

GET http://localhost:8080/greeting 
Authorization: Basic cm9vdDpzZWNyZXQ= 

-- response -- 
200 
Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Thu, 11-May-2017 00:29:44 GMT 
Content-Type: application/json;charset=UTF-8 
Transfer-Encoding: chunked 
Date: Fri, 12 May 2017 00:29:44 GMT 

{"id":1,"content":"Hello, World!"} 

User "Gast" mit dem Kennwort "guest" (keine „admin "Rolle):

GET http://localhost:8080/greeting 
Authorization: Basic Z3Vlc3Q6Z3Vlc3Q= 

-- response -- 
500 
Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Thu, 11-May-2017 00:44:18 GMT rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Thu, 11-May-2017 00:44:18 GMT 
Content-Type: application/json;charset=UTF-8 
Transfer-Encoding: chunked 
Date: Fri, 12 May 2017 00:44:18 GMT 
Connection: close 

{"timestamp":1494549858572,"status":500,"error":"Internal Server Error","exception":"org.apache.shiro.authz.UnauthorizedException","message":"Subject does not have role [admin]","path":"/greeting"} 

Wie zu sehen ist, in der zweiten Anfrage, wird der Benutzer Gast authentifiziert, autorisiert jedoch nicht den gruß Ressource zu verwenden, da die fehlende‚admin‘Rolle (was bedeutet, dass die Anmerkung ist Arbeiten).

Dies ist die minimale Beispiel ich mir vorstellen konnte. Es verwendet Shiros .ini-Konfiguration/Realm für Benutzer, Passwörter und Rollen. Für ein echtes Projekt werden Sie wahrscheinlich ein anspruchsvolleres Bereich Implementierung wie Shiros JdbcRealm

verwenden müssen
Verwandte Themen