1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Login com VRaptor 4 + Widlfy 9

Estou tentando implementar um controle de usuários com VRaptor 4 e ao anotar a classe UserWeb com @SessionScoped para mater o usuário logado, o Widlfly da esse erro ao tentar subir.

17:51:40,320 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-3) MSC000001: Failed to start service jboss.deployment.unit."vraptor.war".WeldStartService: org.jboss.msc.service.StartException in service jboss.deployment.unit."vraptor.war".WeldStartService: Failed to start service
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.jboss.weld.exceptions.DefinitionException: WELD-000046: At most one scope may be specified on [EnhancedAnnotatedTypeImpl] public @SessionScoped @Dependent class br.com.nemesisweb.model.UserWeb
    at org.jboss.weld.bean.attributes.BeanAttributesFactory$BeanAttributesBuilder.validateScopeSet(BeanAttributesFactory.java:227)
    at org.jboss.weld.bean.attributes.BeanAttributesFactory$BeanAttributesBuilder.initScope(BeanAttributesFactory.java:197)
    at org.jboss.weld.bean.attributes.BeanAttributesFactory$BeanAttributesBuilder.<init>(BeanAttributesFactory.java:107)
    at org.jboss.weld.bean.attributes.BeanAttributesFactory$BeanAttributesBuilder.<init>(BeanAttributesFactory.java:91)
    at org.jboss.weld.bean.attributes.BeanAttributesFactory.forBean(BeanAttributesFactory.java:68)
    at org.jboss.weld.bootstrap.AbstractBeanDeployer.createManagedBean(AbstractBeanDeployer.java:263)
    at org.jboss.weld.bootstrap.BeanDeployer.createClassBean(BeanDeployer.java:228)
    at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$2.doWork(ConcurrentBeanDeployer.java:78)
    at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$2.doWork(ConcurrentBeanDeployer.java:75)
    at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:60)
    at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:53)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    ... 3 more

A classe UserWeb está assim:

import javax.enterprise.context.Dependent;
import javax.enterprise.context.SessionScoped;

@Dependent
@SessionScoped
public class UserWeb implements Serializable{
    private static final long serialVersionUID = 1L;

    private User logged;

    public UserWeb() {
        System.out.println("UserWeb");
    }

    public void login(User user){
        this.logged = user;
    }

    public User getUser(){
        return logged;
    }

    public boolean isLogged(){
        return logged != null;
    }
}

O Interceptor:

@RequestScoped
@Intercepts
@AcceptsWithAnnotations(Restrict.class)
public class LoginInterceptor{
    @Inject private UserWeb userWeb;
    @Inject private Result result;

    @AroundCall
    public void intercept(SimpleInterceptorStack stack) {
        if(!userWeb.isLogged()) result.redirectTo(LoginController.class).form();

        stack.next();
    }
}

LoginController:

@Controller
@Path("/")
public class LoginController {
    @Inject private UserDao dao;
    @Inject private Result result;
    @Inject private UserWeb userWeb;

    @Get("/login")
    public void form(){

    }

    @Post("/login")
    public void login(User user){
        if(dao.auth(user) != null){
            userWeb.login(user);
            result.redirectTo(DatabasesController.class).index();
        }else{
            MessageView.error(result, "Usuário ou senha inválidos");
            result.redirectTo(this).form();
        }
    }
}

e o pom.xml:

<dependencies>
        <dependency>
            <groupId>br.com.caelum</groupId>
            <artifactId>vraptor</artifactId>
            <version>4.2.0-RC3</version>
        </dependency>

        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>

No VRaptor 3 a classe UserWeb poderia ser anotada com @Component, já no 4 não sei como pode ser anotada.

Alguém pode me ajudar?

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java vraptor jboss cdi ou faça a sua própria pergunta.