2016-06-08 9 views
0

Ich versuche meine Rest-Dienste zu sichern, die mit Dropwizard von Apache Shiro geschrieben wurden. Zuerst habe ich den Sicherheitsmanager in der Hauptmethode initialisiert.Sichern von Rest-Service-Ressourcen mit Apache Shiro

Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini"); 
    SecurityManager securityManager = factory.getInstance(); 
    SecurityUtils.setSecurityManager(securityManager); 

Dann schrieb ich einen Dienst für die Benutzeranmeldung.

if (!currentUser.isAuthenticated()) { 
     UsernamePasswordToken token = new UsernamePasswordToken(username, password); 
     token.setRememberMe(true); 
     try { 
      currentUser.login(token); 
      System.out.println("USER AUTHENTICATED!!!!!!!!"); 
     } catch (Exception uae) { 
      System.out.println("Error logging in ................."); 
     } 
    } 

Dann habe ich eine Methode mit einigen Java-Anmerkungen erklärt.

@RequiresAuthentication 
    @RequiresRoles("admin") 
    @GET 
    @Path("/account") 
    @ApiOperation(value = "getAccount") 
    public void getAccount() { 
     //do something 
    } 

Aber als ich diese Ressource ohne Anmeldung anmeldete, war ich erfolgreich.

Welchen Fehler mache ich? Oder sollte ich etwas mehr hinzufügen? Wie in der web.xml?

Antwort

0

Ich fand dieses Repo sehr nützlich. https://github.com/silb/dropwizard-shiro/tree/release-0.2. Ich folgte den Anweisungen in diesem. Aber es gibt noch eine Sache, die ich in der Konfigurationsdatei hinzugefügt habe.

Dann in der Ressourcen-Klasse, schrieb ich Login und Abmeldung als zwei Dienste.

@POST 
@Path("/session") 
@Produces(MediaType.TEXT_PLAIN) 
public String login(@FormParam("username") String username, @FormParam("password") String password, @Auth Subject subject) { 
    subject.login(new UsernamePasswordToken(username, password)); 
    return username; 
} 

@PUT 
@Path("/logout") 
@Produces(MediaType.TEXT_PLAIN) 
public String logout(@Auth Subject subject){ 
    subject.logout(); 
    return "Successfully logged out!"; 
} 

Und dann notierte ich die gesicherten Ressourcen mit @RequiresAuthentication Annotation.