使用EJB的JAX-RS服务能否在Resource方法中使用@RolesAllowed?
问题解答
- 根据JBoss 7.1企业版文档的明确要求:当RESTful服务依赖EJB实现时,不建议在JAX-RS Resource方法上使用
@RolesAllowed注解。文档的核心逻辑是,这种场景下的角色安全管控应该完全由EJB容器负责,而非启用RESTEasy自带的基于角色的安全功能。 - 不是“绝对不能用”,而是这种用法会带来潜在问题:如果在Resource层启用
@RolesAllowed,会触发RESTEasy的独立安全校验流程,和EJB容器的安全机制可能产生冲突,比如权限校验重复、用户安全上下文不一致等情况。 - 结合你的应用架构(JAX-RS层+EJB层),更规范的做法是:
- 将核心权限校验逻辑放在EJB层,给EJB的业务方法添加
@RolesAllowed注解,由EJB容器完成权限检查。 - JAX-RS层仅负责请求的接收与转发,不需要添加
@RolesAllowed;如果需要做前置的简单角色校验,继续使用SecurityContext.isUserInRole()是可行的,但核心权限管控仍需交给EJB层。
- 将核心权限校验逻辑放在EJB层,给EJB的业务方法添加
- 关于web.xml为空的情况:JBoss 7.1 EE中EJB的安全配置可通过ejb-jar.xml或EJB类/方法上的安全注解实现,web.xml为空不会影响EJB容器的安全功能生效。
内容的提问来源于stack exchange,提问作者MFH
相关产品推荐
相关产品推荐

