【问题标题】:Is it possible to disable RoleBasedSecurityFilter.java of RESTEasy?是否可以禁用 RESTEasy 的 RoleBasedSecurityFilter.java?
【发布时间】:2014-11-20 07:20:00
【问题描述】:

我正在开发一个使用 JBoss RESTEasy (resteasy-jaxrs-3.0.8) 的 Web 应用程序,但我想禁用 RoleBasedSecurityFilter.java 并且只使用我自己的自定义 SecurityInterceptor 类(它也实现 javax.ws.rs.container.ContainerRequestFilter 就像RoleBasedSecurityFilter 类确实如此,因此它们都是安全过滤器)。

原因是RoleBasedSecurityFilter.java 中的line 43 调用了isUserInRole() method,它在我的应用程序中总是返回false。结果引发了 ForbiddenException,这会阻止用户访问他应该有权访问的资源。

我真的很喜欢能够使用@RolesAllowed annotation 来声明哪些角色可以访问某些功能,但正如所解释的,RoleBasedSecurityFilter 类阻止了这一点。所以我的问题是,有谁知道如何禁用一个特定的 RESTEasy 过滤器(即 RoleBasedSecurityFilter)?

我想它可能在部署描述符 (web.xml) 中完成(例如使用 context-param element),但我不知道如何实际禁用过滤器。

我意识到我也可以更改我正在使用的 RESTEasy 库中的 RoleBasedSecurityFilter.java 文件中的行,但这种方法对我来说太老套了,因为我不想被卡住每次我升级我的 RESTEasy 版本时再次应用这个 hack。 (虽然不知道会是多久..)

【问题讨论】:

    标签: java security rest jboss resteasy


    【解决方案1】:

    您可以通过在 web.inf 部署描述符中添加此配置来启用/禁用基于角色的安全性。

    <context-param>
        <param-name>resteasy.role.based.security</param-name>
        <param-value>true</param-value>
    </context-param>
    

    希望这会有所帮助。

    【讨论】:

    • 我知道我可以通过将该值设置为 false 来禁用 all RESTEasy 基于角色的安全性,但 then I get a javax.ejb.EJBAccessException... 无论如何,我 想要禁用所有基于 RESTEasy 角色的安全性,因为我有自己的自定义 SecurityInterceptor 类(这也是 RESTEasy 安全性!)我只想禁用一个特定的安全过滤器,即标准 RESTEasy 安全过滤器(即RoleBasedSecurityFilter.java)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 2014-10-08
    • 2018-12-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    相关资源
    最近更新 更多