Безопасность Seam 3 не работает с классом пользовательского аутентификатора JBoss7, который не найден

Я пробовал безопасность шва 3 в Jboss7.1.3 с проектом уха, созданным с помощью архетипа maven (javaee6-jboss-ear), но я не могу обойти ошибку, из-за которой мой пользовательский класс не может быть загружен.

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 (где определены beans.xml и аутентификатор) -war

Мой класс аутентификатора: package com.czetsuya.javaee6.security;

импортировать javax.enterprise.inject.Model; импортировать javax.inject.Inject;

импортировать org.jboss.seam.security.BaseAuthenticator; импортировать org.jboss.seam.security.Credentials; импортировать org.picetlink.idm.impl.api.PasswordCredential; импортировать org.picetlink.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"));    
        }    
    }    
}

Мои бобы.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 я определил шовную бомбу:

<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 я определил безопасность шва:

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

Предоставляется область действия, иначе у меня возникнут проблемы с компиляцией: отсутствующие классы.

Странно то, что та же установка работает, когда я развертываю военный проект, есть идеи? Я просто засунул войну в ухо :-)

Я также делаю то же самое с ухом, сгенерированным из архетипа maven с минимальными изменениями, я просто добавляю Authenticator и зависимость от безопасности швов. Большая разница с проектом, в котором у меня возникла ошибка, заключается в том, что я заменил большинство банок jboss на javaee-api, потому что это стандарт. И я думал, что JBoss стандартен :-), похоже, снова происходит какое-то волшебство с его собственными банками.

* Рабочий чистый проект jboss загружен здесь: https://code.google.com/p/czetsuya/source/browse/#svn%2Ftrunk%2Fjboss7-seam3-security


person czetsuya    schedule 29.03.2013    source источник


Ответы (1)


Что сработало для меня, так это исключение jar-файла безопасности в файле war pom.xml, например:

<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>
person czetsuya    schedule 03.04.2013