Tôi đang cố xác thực người dùng bằng bộ lọc JAX-RS có vẻ như hoạt động cho đến nay. Đây là bộ lọc mà tôi đang thiết lập một SecurityContext mới:Ủy quyền với RolesAllowedDynamicFeature và Jersey
@Provider
public class AuthenticationFilter implements ContainerRequestFilter {
@Override
public void filter(final ContainerRequestContext requestContext) throws IOException {
requestContext.setSecurityContext(new SecurityContext() {
@Override
public Principal getUserPrincipal() {
return new Principal() {
@Override
public String getName() {
return "Joe";
}
};
}
@Override
public boolean isUserInRole(String string) {
return false;
}
@Override
public boolean isSecure() {
return requestContext.getSecurityContext().isSecure();
}
@Override
public String getAuthenticationScheme() {
return requestContext.getSecurityContext().getAuthenticationScheme();
}
});
if (!isAuthenticated(requestContext)) {
requestContext.abortWith(
Response.status(Status.UNAUTHORIZED)
.header(HttpHeaders.WWW_AUTHENTICATE, "Basic realm=\"Example\"")
.entity("Login required.").build());
}
}
private boolean isAuthenticated(final ContainerRequestContext requestContext) {
return requestContext.getHeaderString("authorization") != null; // simplified
}
}
Phương pháp nguồn trông như thế này:
@GET
// @RolesAllowed("user")
public Viewable get(@Context SecurityContext context) {
System.out.println(context.getUserPrincipal().getName());
System.out.println(context.isUserInRole("user"));
return new Viewable("index");
}
Các RolesAllowedDynamicFeature được đăng ký như thế này:
.register(RolesAllowedDynamicFeature.class)
tôi có thể xem các kết quả đầu ra mong đợi trên bảng điều khiển. Nhưng nếu tôi bỏ ghi chú @RolesAllowed("user")
, tôi nhận được lỗi Forbidden
và phương thức isUserInRole
của SecurityContext của tôi không bao giờ được gọi. Theo sau API doc RolesAllowedDynamicFeature nên gọi phương thức này.
Tôi có thể sử dụng RolesAllowedDynamicFeature như thế nào?
Cảm ơn, bạn đã lưu ngày của tôi. Tôi đã thiết lập mức độ ưu tiên bằng cách sử dụng thanh ghi (AuthenticationFilter.class, Priorities.AUTHENTICATION) nhưng dường như bằng cách nào đó hoàn toàn bị bỏ qua. Sử dụng chú thích đã sửa nó. – emas
Bạn đã lưu ngày của tôi quá !!! – Manish