ContainerRequestFilterインターフェイスでフィルタを作成し、ユーザーエンティティを返すカスタムロールを割り当てようとしました。ContainerRequestFilterを使用してJersey WebServiceのカスタム@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サービスに達しました。ジャージーではどのように異なるカスタムロールを提供できますか?
[OK]を使用する必要がありますちょうど com.sun.jersey.spi.container.ResourceFiltersを追加する別の方法 する必要があります com.sun.jersey.api.container.filter.RolesAllowedResourceFilterFactory PARAM-value>は私のweb.xmlの解決の問題へ フィルタ。しかし、なぜ私はContainerRequestFilters以外のフィルタを初期化する必要がありますか? –
erhan
Jerseyは@RolesAllowedをそのまま使用できないため、前述のフィルタはこのサポートを追加します。そしてBTW、あなたは不正なために400を返すべきではない、それは悪い要求を意味する。 HTTPステータス401を参照してください。 –