@RolesAllowed等没有web.xml

时间:2017-07-07 13:51:59

标签: java jax-rs web.xml ejb-3.1

我目前正在开发一个非常模块化的应用程序,我们有许多罐子将在war文件中打包并粘合在一起。

其中一些jar文件具有想要保护的REST资源。常见的方法是@RolesAllowed注释等。

根据我目前的知识,这意味着WAR中的现有web.xml。这样我们就必须在WAR内部实现特定于jar的信息(例如上下文根),而不是在它所属的地方。

就像现在的大多数事情一样 - 有没有一种方法可以在没有web.xml的情况下以编程方式设置安全上下文等?

2 个答案:

答案 0 :(得分:1)

您可以通过在RolesAllowedDynamicFeature

范围内的REST配置类中注册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