2014-09-25 73 views
2

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

这样做的原因是,在line 43RoleBasedSecurityFilter.java调用isUserInRole() method,它总是返回我的应用程序错误。并因此导致ForbiddenException被抛出,这阻止了用户访问他应该有权访问的资源。

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

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

我知道我还可以更改RoleBasedSecurityFilter.java文件中我使用的RESTEasy库线,但这种方法太哈克对我来说,因为我不想不得不将此黑客被卡住每次我都会升级RESTEasy版本。 (不知道多久会这样..)

回答

0

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

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

希望这会有所帮助。

+0

我知道我可以通过将该值设置为false来禁用** all ** RESTEasy基于角色的安全性,但是[然后我得到'javax.ejb.EJBAccessException'](http://stackoverflow.com/q/25851374/2541501)...无论如何,我不希望禁用所有RESTEasy基于角色的安全性,因为我有我自己的自定义'SecurityInterceptor'类(这也是RESTEasy安全性!)我只想_disable一个特定的安全filter_ ,即标准的RESTEasy安全过滤器(即'RoleBasedSecurityFilter.java')。 – PJvG 2014-10-24 07:44:54

相关问题