Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAX-RS和自定义授权_Java_Jax Rs_Restful Authentication - Fatal编程技术网

Java JAX-RS和自定义授权

Java JAX-RS和自定义授权,java,jax-rs,restful-authentication,Java,Jax Rs,Restful Authentication,我正试图保护JAX-RS端点的安全,目前正试图弄清楚身份验证和授权是如何工作的。大多数示例都非常简单,因为它们仅通过web.xml从JavaEEAppServer角色中复制 我想知道如何使用JavaEE以外的东西作为角色。例如:我想使用会话或某种令牌(或某种标识符)。这取决于您使用的JAX-RS实现。我正在使用嵌入式 看 一旦在HttpServletRequest中有了Principal,就可以将它们注入JAX-RS请求的上下文中 public abstract class AbstractRe

我正试图保护JAX-RS端点的安全,目前正试图弄清楚身份验证和授权是如何工作的。大多数示例都非常简单,因为它们仅通过web.xml从JavaEEAppServer角色中复制


我想知道如何使用JavaEE以外的东西作为角色。例如:我想使用会话或某种令牌(或某种标识符)。

这取决于您使用的JAX-RS实现。我正在使用嵌入式

一旦在
HttpServletRequest
中有了
Principal
,就可以将它们注入JAX-RS请求的上下文中

public abstract class AbstractResource {
    private Principal principal;
    @Context
    public void setSecurityContext(SecurityContext context) {
        principal = context.getUserPrincipal();
    }
    protected Principal getPrincipal() {
        return principal;
    }
}

@Path("/some/path")
public class MyResource extends AbstractResource {
    @GET
    public Object get() {
        Principal user = this.getPrincipal();
        // etc
    }
}

免责声明:除非您真的、真的、真的需要,否则不要扮演您自己的安全框架的角色

看看这件运动衫的功能。它读取授权标头,该标头以与通常理解的格式(HTTP Basic)不同的格式保存凭据。它会将这些凭据转换为角色,然后您可以使用这些角色来实现安全性(@RolesAllowed),如果您添加了实际执行的。试着看看这些过滤器是如何工作的

public abstract class AbstractResource {
    private Principal principal;
    @Context
    public void setSecurityContext(SecurityContext context) {
        principal = context.getUserPrincipal();
    }
    protected Principal getPrincipal() {
        return principal;
    }
}

@Path("/some/path")
public class MyResource extends AbstractResource {
    @GET
    public Object get() {
        Principal user = this.getPrincipal();
        // etc
    }
}