2015-05-20 1 views
0

Я использую веб-сервис для поиска пути к файлу. Здесь я использую контекст безопасности для обеспечения некоторой дополнительной безопасности. Я использовал валидацию о зарегистрированном пользователе, должен быть таким же, как имя пользователя, указанное в URL-адресе веб-службы (проверка безопасности).Как исключить специальных пользователей из проверки проверки безопасности в restful webservice

Но у меня есть один специальный случай, где у меня есть один пользователь, который используется для получения специального пути к файлам с сервера. Если я передаю этого пользователя из URL-адреса веб-службы, он попадает в проверку контекста безопасности, поскольку зарегистрированный пользователь и указанный URL-адрес не совпадают.

Таким образом, существует другой способ исключить специального пользователя из проверки безопасности. Могу ли я указать некоторую конфигурацию в web.xml для решения этой проблемы.

например

condition 1 

logged-in user - xyz 
web-service URL - 192.168.0.132/download.ws/xyz/fileid 

passed in security checked. 

и

condition 2 

logged-in user - xyz 
abc is valid and authorized user. 
web-service URL - 192.168.0.132/download.ws/abc/fileid 

failed in security checked. 

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

здесь код веб-сервис для проверки действительного пользователя

public String getCallerId(SecurityContext sc) { 

     // we always create a GenericPrincipal object in AuthService 
     GenericPrincipal userPrincipal = (GenericPrincipal) sc.getUserPrincipal(); 
     String szUserEmailID= userPrincipal.getName(); 

     return szUserEmailID; 
    } 

    public boolean authorizeRequest(SecurityContext osc, String szResourceID, String reqType) { 
      if(getCallerId(osc).equalsIgnoreCase(szResourceID)) // check for logged-in user and user specified in web-service url 
       return true; 
      return false; 
     } 

ответ

0

Вы должны использовать роли и аннотации безопасности. https://blogs.oracle.com/swchan/entry/servlet_3_0_security_annotations

Также я не понимаю, почему имя пользователя является частью URL-адреса. Это не должно быть так. Вы знаете имя пользователя. Url должен быть для всех пользователей одинаковым и только возвращать соответствующие данные для текущего аутентифицированного пользователя. Таким образом, у вас не было бы этих проблем.

Вы можете позволить следующее:

@RolesAllowed("StandardRole") 192.168.0.132/download.ws/fileid

@RolesAllowed("SuperUser") 192.168.0.132/download.ws/{special_path_pattern}/fileid