【问题标题】:RESTEasy support for JAX-RS @RolesAllowed对 JAX-RS @RolesAllowed 的 RESTEasy 支持
【发布时间】:2014-08-26 19:48:16
【问题描述】:

我花了几个小时在嵌入式 Jetty 9.1.0.v20131115 和 RESTEasy 3.0.5.Final 中安装自定义登录服务。我的登录服务将在数据库中查找用户并为他们分配角色。它看起来像这样:

final Constraint restConstraint = new Constraint();
restConstraint.setName(Constraint.__BASIC_AUTH);
restConstraint.setRoles(new String[]{"user", "admin");
restConstraint.setAuthenticate(true);
final ConstraintMapping restConstraintMapping = new ConstraintMapping();
restConstraintMapping.setConstraint(restConstraint);
restConstraintMapping.setPathSpec("/api/*");
final ConstraintSecurityHandler restSecurityHandler = new ConstraintSecurityHandler();
final LoginService myLoginService = new MyLoginService();
restSecurityHandler.setAuthenticator(new BasicAuthenticator());
restSecurityHandler.setRealmName(myLoginService.getName());
restSecurityHandler.addConstraintMapping(restConstraintMapping);
restSecurityHandler.setLoginService(myLoginService);

我的用户joe-user 具有user 的角色,jane-admin 同时具有useradmin 角色。我有一个名为 my-resource 的 REST GET 资源,标记为:

@RolesAllowed("admin")

当我在 my-resource 上执行 HTTP GET 时,浏览器会正确请求凭据,我可以使用 joe-userjane-admin 登录。问题是任何一个用户都被允许GETmy-resource!!

我已经跟踪了一些 Jetty 代码,实际上,由于我上面的登录服务,Jetty 会询问登录用户支持哪些角色。不幸的是,Jetty 将接受我在restConstraint.setRoles(new String[]{"user", "admin") 中指定的任何角色,无论用户是谁。

显然,RESTEasy 层应该识别@RolesAllowed("admin") 注释并验证用户。但是如何让 RESTEasy 做到这一点?

【问题讨论】:

    标签: jax-rs resteasy embedded-jetty


    【解决方案1】:

    RESTEasy documentation 的帮助下,我发现为了让RESTEasy 遵守@RolesAllowed 注释,必须在web.xml 文件中打开resteasy.role.based.security 上下文参数开关;或以编程方式,就像我正在做的那样:

    final ServletHolder servletHolder = new ServletHolder(new HttpServlet30Dispatcher());
    servletHolder.setInitParameter("javax.ws.rs.Application", MyApplication.class.getName());
    servletHolder.setInitParameter("resteasy.role.based.security", String.valueOf(true));
    contextHandler.addServlet(servletHolder, "/api/*");
    

    【讨论】:

    • 当您没有 web.xml 时,您会将发布的代码放在哪里以便以编程方式设置它?
    • 我没有代码,但从阅读我原来的问题来看,我似乎在使用 Jetty。您必须查看嵌入 Jetty 的文档——然后我的代码应该更有意义。
    猜你喜欢
    • 1970-01-01
    • 2014-02-03
    • 2015-07-22
    • 2015-11-28
    • 2020-09-08
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    相关资源
    最近更新 更多