2016-06-08 7 views
0

Я пытаюсь защитить свои службы отдыха, написанные с помощью Dropwizard от Apache Shiro. Сначала я инициализировал менеджера безопасности в основном методе.Обеспечение ресурсов ресурсов отдыха с помощью Apache Shiro

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

Затем я написал сервис для входа пользователя в систему.

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 ................."); 
     } 
    } 

Затем я объявил метод с некоторыми аннотациями java.

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

Но когда я получил доступ к этому ресурсу без входа в систему, я был успешным.

Какая ошибка я делаю? Или я должен добавить что-то еще? Как в web.xml?

ответ

0

Я нашел этот репо очень полезным. https://github.com/silb/dropwizard-shiro/tree/release-0.2. Я следовал инструкциям, приведенным в этом. Но есть еще одна вещь, которую я добавил в файле конфигурации.

Затем в классе ресурсов я написал логин и выход в систему как две службы.

@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!"; 
} 

И затем я аннотировал защищенные ресурсы с помощью аннотации @RequiresAuthentication.