首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Deltaspike和@无状态Bean

Deltaspike和@无状态Bean
EN

Stack Overflow用户
提问于 2014-11-06 21:56:31
回答 2查看 507关注 0票数 3

我想用DeltaSpike- EJb来保护我的“无状态”API。

代码语言:javascript
复制
@Stateless
@Remote(UserServiceRemote.class)
public class UserService implements UserServiceRemote

在方法级别,我有一个自定义的注解"Support“

代码语言:javascript
复制
@Support
public void doSomething() {}

因此我写了一个自定义注释"@Support":

代码语言:javascript
复制
@Retention(value = RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD })
@Documented
@SecurityBindingType
public @interface Support {

我的自定义Authorizer如下所示:

代码语言:javascript
复制
@Secures
@Support
public boolean doAdminCheck(Identity identity, IdentityManager identityManager, RelationshipManager relationshipManager)
            throws Exception {      
    return hasRole(relationshipManager, identity.getAccount(), getRole(identityManager, "Support"));
}

在我包含的"beans.xml“文件中:

代码语言:javascript
复制
<interceptors>
    <class>org.apache.deltaspike.security.impl.extension.SecurityInterceptor</class>
</interceptors>

但是在我登录我的应用程序并为每个远程调用调用"doSomething“方法之后,"Support”注释被忽略了,无论我是否拥有该角色。

我哪里做错了?感谢所有的建议!

EN

回答 2

Stack Overflow用户

发布于 2014-11-07 14:19:43

Ejb和CDI是两个不同的概念。无状态会话bean和托管CDI bean由不同的容器管理。因此您不能在无状态会话bean上使用Deltaspike。如果要使用deltaspike安全性,请改用命名bean并使用不同的远程处理策略。

票数 2
EN

Stack Overflow用户

发布于 2015-09-08 04:30:27

在我的例子中,我必须确保包含我想要用注释保护的服务的模块(jar)中有带deltaspike拦截器的beans.xml文件(以前我只将该文件添加到带有安全代码本身的模块中,这是一个问题)。

我还发现,我必须将业务逻辑服务与SOAP端点声明本身分开。此自定义EJB @Stateles (或任何其他)服务可以@注入到SOAP中,安全注释(此处为@Support)将在其上工作。

在我看来,将端点声明与业务代码分离无论如何都是一个很好的设计,因为我们可能会有多个接口调用相同的业务逻辑。(而且更容易进行单元测试等)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26781257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档