Ich versuche, Benutzer mit einem JAX-RS-Filter zu authentifizieren, was bisher scheint zu funktionieren. Dies ist der Filter, wo ich ein neues Security bin Einstellung:Autorisierung mit RolesAllowedDynamicFeature und 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
}
}
Die Ressource Methode sieht wie folgt aus:
@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");
}
Die RolesAllowedDynamicFeature wird wie folgt registriert:
.register(RolesAllowedDynamicFeature.class)
ich kann Sehen Sie sich die erwarteten Ausgaben auf der Konsole an. Aber wenn ich @RolesAllowed("user")
auskommentiere, erhalte ich einen Forbidden
Fehler und die isUserInRole
Methode meines SecurityContext wird nie genannt. Nach dem API doc sollte RolesAllowedDynamicFeature diese Methode aufrufen.
Wie kann ich RolesAllowedDynamicFeature verwenden?
Danke, du hast meinen Tag gerettet. Ich habe die Priorität gesetzt, indem ich das Register (AuthenticationFilter.class, Priorities.AUTHENTICATION) benutzt habe, aber anscheinend wurde das völlig ignoriert. Mit der Annotation wurde es behoben. – emas
Du hast meinen Tag gerettet !!! – Manish