我已经寻找这个问题的解决方案有一段时间了,这里是......
我按照本教程从数据库自动生成 jax-rs Web 服务:https://netbeans.org/kb/docs/websvc/rest.html https://netbeans.org/kb/docs/websvc/rest.html
这很好用,但是当我尝试通过使用 @RolesAllowed("myRole") 注释资源方法来保护应用程序时,我收到此异常...
“警告:EJB5184:调用 EJB LicenceFacadeREST 期间发生系统异常,方法:public java.util.List resources.LicenceFacadeREST.findAll()
警告:javax.ejb.AccessLocalException:客户端未获得此调用的授权”
我已将范围缩小到 EJB JACC 策略检查失败。当我不在资源类中使用 EJB/JPA 时,即使存在 @RolesAllowed 注释,也不会引发异常。
完整的 glassfish 堆栈跟踪(精美印刷)可以在此处找到http://pastebin.com/AUPKWaqe http://pastebin.com/AUPKWaqe
这是一些额外的信息,我遵循了下面的泽西岛安全指南。https://jersey.java.net/documentation/latest/security.html#d0e10816 https://jersey.java.net/documentation/latest/security.html#d0e10816
我使用 ContainerRequestFilter 进行身份验证,如果身份验证成功,我将在此处设置 SecurityContext 的自定义实现,rolesalloweddynamic 功能将与 Rolesallowed 注释一起使用来授权对特定资源的访问。
这三个组件允许我在应用程序级别而不是容器级别进行身份验证和授权。
在我的应用程序从 servlet 转换为 EJB/servlet(我向 jax-rs 资源类添加了无状态 ejb 注释)之前,这种方法一直运行良好。 EJB 使用 Rolesallowed 注释在容器级别限制对其 bean 方法的访问,因此它与我的应用程序级别身份验证/授权发生冲突。
我仍在寻找一个全面的解决方案,即使它禁用了 EJB 级别的方法安全性,这样我就可以将其留给 ContainerRequestFilter 进行身份验证并由 RolesallowedDynamicfeature 进行授权。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)