2012-03-06 26 views
4

我使用ContainerRequestFilter接口創建了一個過濾器,並嘗試分配返回用戶實體的自定義角色。在Jersey WebService中使用ContainerRequestFilter自定義@RolesAllowed角色

@Override 
public ContainerRequest filter(ContainerRequest request) { 
    User user = authenticate(request); 
    if (user != null) { 
     request.setSecurityContext(new Authorizer(user)); 
    } else { 
     throw new WebApplicationException(400); 
    } 
    return request; 

} 

private User authenticate(ContainerRequest request) { 

    user = new User("erhan", "customRole"); 


    return user; 
} 

public class Authorizer implements SecurityContext { 

    private User user; 
    private Principal principal; 

    public Authorizer(final User user) { 
     this.user = user; 
     this.principal = new Principal() { 

      public String getName() { 
       return user.username; 
      } 
     }; 
    } 

    public Principal getUserPrincipal() { 
     return this.principal; 
    } 

    public boolean isUserInRole(String role) { 
     return (role.equals(user.role)); 
    } 

    public boolean isSecure() { 
     return "https".equals(uriInfo.getRequestUri().getScheme()); 
    } 

    public String getAuthenticationScheme() { 
     return SecurityContext.BASIC_AUTH; 
    } 
} 

public class User { 

    public String username; 
    public String role; 

    public User(String username, String role) { 
     this.username = username; 
     this.role = role; 
    } 
} 

一切都很好,與過濾器,但是當它進入Web服務

@GET 
@RolesAllowed({"customRole"}) 
@Path("/test") 
public String getByType(@Context HttpHeaders headers,@Context SecurityContext sc, 
           @Context HttpServletRequest request) { 



    return null; 
} 

到達web服務,但是當我改變角色,仍得出同樣的web服務。我如何在澤西島提供不同的自定義角色?

+4

好吧,我想我找到了解決辦法而應該是不同的方式 只需添加 ​​com.sun.jersey.spi.container.ResourceFilters com.sun.jersey.api.container.filter.RolesAllowedResourceFilterFactory 濾波器到我的web.xml解決的問題。但是爲什麼我需要初始化另一個過濾器ContainerRequestFilters? – erhan 2012-03-06 20:47:10

+2

由於Jersey不支持開箱即用的@RolesAllowed。提到的過濾器增加了這種支持。順便說一句,你不應該返回400未經授權,這意味着不好的要求。請參閱HTTP狀態401。 – 2012-03-07 13:43:10

回答

相關問題