Java Jersey REST Servlet中角色允许的批注不工作

Java Jersey REST Servlet中角色允许的批注不工作,java,security,tomcat,jersey,authorization,Java,Security,Tomcat,Jersey,Authorization,我有一个web应用程序,使用Jersey3、Tomcat 10和来自Tomcat的数据源ALM进行身份验证 运行Servlet工作顺利,但授权似乎没有发生,因为每个经过身份验证的用户都可以访问资源,即使这些方法被标注为@RolesAllowed 我的控制器如下所示: @Path("/dataset") public class DatasetController { @RolesAllowed({"1, 3"}) @GET @Pr

我有一个web应用程序,使用Jersey3、Tomcat 10和来自Tomcat的数据源ALM进行身份验证

运行Servlet工作顺利,但授权似乎没有发生,因为每个经过身份验证的用户都可以访问资源,即使这些方法被标注为@RolesAllowed

我的控制器如下所示:

@Path("/dataset")
public class DatasetController {

    @RolesAllowed({"1, 3"})
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getAllEntries(@DefaultValue("1") @QueryParam("state") int state) 
web.xml如下所示:

@Path("/dataset")
public class DatasetController {

    @RolesAllowed({"1, 3"})
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getAllEntries(@DefaultValue("1") @QueryParam("state") int state) 

你好词
/*
条目REST端点
/原料药/*
1.
2.
3.
基本的
静止端点
/原料药/*
1.
2.
3.
我在调试时检查了SecurityContext,经过身份验证的用户获得了正确的角色,例如,
sc.isUserInRole(“1/2/3”)
表明身份验证工作正常。角色必须被称为1,2,3,但这似乎不是一个问题


我错过了什么?谢谢你的任何意见

因此,您可以使用两种不同的授权机制:Servlet容器提供的授权机制或Jersey提供的授权机制。使用Servlet容器提供的一个,您可以在web.xml中配置所有角色和安全性。使用Servlet容器授权时,所有允许的
@RolesAllowed
注释都不起作用

那你就有新泽西的授权了。对于Jersey,它将从Servlet容器身份验证中获取经过身份验证的用户,并根据
@RolesAllowed
注释进行授权。如果要使用Jersey授权,只需注册
rolesAllowedDynamic功能

要使用Jersey的授权,请首先删除web.xml中的所有授权配置。然后,如果您使用
ResourceConfig
进行应用程序配置,只需使用以下内容注册该功能

寄存器(RolesAllowedDynamicFeature.class);
如果您使用web.xml进行应用程序配置,请使用以下init参数


jersey.config.server.provider.classnames
org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature
这基本上就是让授权生效


对于看到本文的其他人,请记住OP使用的是Servlet容器身份验证。如果执行此操作,则只需注册
RolesAllowedDynamicFeature
即可获得授权。如果不使用Servlet容器身份验证,则需要实现自己的身份验证过滤器,在其中需要进行身份验证,然后设置SecurityContext。查看更多信息。

好的,非常感谢您的投入!最后一个问题;为什么我不应该使用servlet容器提供的授权机制?它似乎能起到作用,实际上^^一般来说,它不能混淆两件事,或者它背后还有更多的东西吗?是的,这就是我在第三条评论中的意思。现在可以正常工作了,功能只是丢失了-没有看到!谢谢您的时间:)