0

我一直在用 maven 原型(javaee6-jboss-ear)生成的 ear 项目在 Jboss7.1.3 中尝试 seam3 安全性,但我无法解决无法加载我的自定义类的错误。

Caused by: java.lang.ClassNotFoundException: com.czetsuya.javaee6.security.Authenticator from [Module "deployment.javaee6-demo.ear.javaee6-demo-ejb-0.0.1-SNAPSHOT.jar:main" from Service Module Loader]

我的项目结构如下: myProject -ear -jar(bean.xml 和身份验证器在其中定义)-war

我的 Authenticator 类:包 com.czetsuya.javaee6.security;

导入 javax.enterprise.inject.Model;导入 javax.inject.Inject;

导入 org.jboss.seam.security.BaseAuthenticator;导入 org.jboss.seam.security.Credentials;导入 org.picketlink.idm.impl.api.PasswordCredential;导入 org.picketlink.idm.impl.api.model.SimpleUser;

@Model
public class Authenticator extends BaseAuthenticator {
    @Inject
    Credentials credentials;

    public Authenticator() { }

    @Override
    public void authenticate() {
        if ("demo".equals(credentials.getUsername())
                && credentials.getCredential() instanceof PasswordCredential
                && "demo".equals(((PasswordCredential) credentials.getCredential()).getValue())) {    
            setStatus(AuthenticationStatus.SUCCESS);
            setUser(new SimpleUser("demo"));    
        }    
    }    
}

我的 beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:s="urn:java:ee" xmlns:security="urn:java:org.jboss.seam.security"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://jboss.org/schema/cdi/beans_1_0.xsd">

    <interceptors>
        <class>org.jboss.seam.security.SecurityInterceptor</class>
    </interceptors>

    <security:IdentityImpl>
        <s:modifies />
        <security:authenticatorClass>com.czetsuya.javaee6.security.Authenticator
        </security:authenticatorClass>
    </security:IdentityImpl>

</beans>

在 myProject 中,我定义了 seam-bom:

<dependency>
    <groupId>org.jboss.seam</groupId>
    <artifactId>seam-bom</artifactId>
    <version>3.1.0.Final</version>
    <scope>import</scope>
    <type>pom</type>
</dependency>

在 ejb/pom.xml 中,我定义了 seam-security:

<dependency>
    <groupId>org.jboss.seam.security</groupId>
    <artifactId>seam-security</artifactId>
    <scope>provided</scope>
</dependency>

提供了范围,否则我会遇到编译问题:缺少类。

奇怪的是,当我部署战争项目时,同样的设置工作,知道吗?我只是把战争放在耳朵里:-)

我也对从 maven 原型生成的耳朵做同样的事情,只做很少的改动,我只是添加了 Authenticator 和 seam-security 依赖项。我遇到错误的项目的最大区别是我用 javaee-api 替换了大多数 jboss jar,因为它是标准的。而且我认为 JBoss 是标准的 :-),似乎有一些魔法再次发生在它自己的罐子上。

*工作的纯 jboss 项目在这里上传: https ://code.google.com/p/czetsuya/source/browse/#svn%2Ftrunk%2Fjboss7-seam3-security

4

1 回答 1

0

对我有用的是排除 war pom.xml 中的 seam-security jar,例如:

<dependency>
    <groupId>com.czetsuya</groupId>
    <artifactId>javaee7-ejb</artifactId>
    <type>ejb</type>
    <scope>provided</scope>
    <exclusions>
        <exclusion>
            <artifactId>seam-security</artifactId>
            <groupId>org.jboss.seam.security</groupId>
        </exclusion>
    </exclusions>
</dependency>
于 2013-04-03T01:58:04.287 回答