我目前正在开发一个非常模块化的应用程序,我们有许多罐子将在war文件中打包并粘合在一起。
其中一些jar文件具有想要保护的REST资源。常见的方法是@RolesAllowed注释等。
根据我目前的知识,这意味着WAR中的现有web.xml。这样我们就必须在WAR内部实现特定于jar的信息(例如上下文根),而不是在它所属的地方。
就像现在的大多数事情一样 - 有没有一种方法可以在没有web.xml的情况下以编程方式设置安全上下文等?
答案 0 :(得分:1)
您可以通过在RolesAllowedDynamicFeature
ResourceConfig
来限制对REST资源的访问
public class ApplicationConfig extends ResourceConfig {
public ApplicationConfig() {
super(ApplicationConfig.class);
register(RolesAllowedDynamicFeature.class);
}
}
因此,您可以在资源方法上使用您的应用程序角色,例如
import javax.annotation.security.PermitAll;
import javax.annotation.security.RolesAllowed;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.SecurityContext;
@Path("secured")
@PermitAll
public class SecuredResource {
@GET
@Path("user")
@RolesAllowed("user")
public String user(@Context SecurityContext sc) {
boolean test = sc.isUserInRole("user");
return (test) ? "true": "false";
}
@GET
@Path("admin")
@RolesAllowed("admin")
public String admin(@Context SecurityContext sc) {
boolean test = sc.isUserInRole("admin");
return (test) ? "true": "false";
}
}
Jersey文档提供了有关使用注释保护REST资源的更多详细信息
https://jersey.github.io/documentation/latest/security.html#d0e12428
答案 1 :(得分:1)
我暂时没有使用JAX-RS,但上次检查时,使用基于注释的安全性时,web.xml不是可选的。
详情请参阅我的回答。 https://stackoverflow.com/a/20023018/839733