tira o @Component do spring e vê se dá algum erro… ele só tá dando null?
J
jvds
se eu tirar @Component do spring de LoginModule.class para de funcionar a classe Seguranca.class que e um AspectJ entende la ela recebe LoginModule.class para validar as Regras(roles).
bom… vc vai ter que deixar só as anotações de registro do Spring então…
o problema é que as classes que usam o AspectJ estão do lado do Spring… o lado do Spring não consegue enxergar o lado do VRaptor… mas o lado do VRaptor consegue enxergar o lado do Spring…
pra anotação @Component do Spring funcionar vc precisa colocar o component-scan do spring no seu applicationContext.xml:
o @SessionScoped do vraptor não vai funcionar tb… então vc vai ter que usar a configuração respectiva do spring
J
jvds
Lucas Cavalcanti:
bom… vc vai ter que deixar só as anotações de registro do Spring então…
o problema é que as classes que usam o AspectJ estão do lado do Spring… o lado do Spring não consegue enxergar o lado do VRaptor… mas o lado do VRaptor consegue enxergar o lado do Spring…
pra anotação @Component do Spring funcionar vc precisa colocar o component-scan do spring no seu applicationContext.xml:
o @SessionScoped do vraptor não vai funcionar tb… então vc vai ter que usar a configuração respectiva do spring
No aplicationContext.xml ja esta no scan do pacote, mas nao entendi como vou fazer configuração respectiva do spring como posso fazer tem como me mostrar um exemplo.
em que parte do sistema vc tá usando esse login module? É durante uma requisição?
J
jvds
Lucas eu consegui resolver desta forma no LoginModule.class colquei @Component e @Scope(value=“session”) e na Seguranca.class que e um AspectJ @Ascpect@Component eu acrescentei tambem @Scope(value=“session”) so que nao entendi muito bem acho que como LoginModule.class esta com @Scope ou seja escopo de sessao a Segurancao que esta esperando um logimModule via @Autowired tem que tambem estar em escopo nao sei se e isso se puder me explicar melhor agradeço.
Ficou assim
LoginModule.class
@org.springframework.stereotype.Component@org.springframework.context.annotation.Scope(value="session")publicclassLoginModule{privateUseruser;privateHashMap<String,Role>mapeamentoRole;publicvoidlogin(Useruser){// TODO Auto-generated method stubvalidateUser(user);}publicvoidlogout(){// TODO Auto-generated method stubthis.mapeamentoRole=null;this.user=null;}publicbooleanisNotLogged(){// TODO Auto-generated method stubreturn(this.user==null);}}
se vc não coloca o @Scope no Segurança, ele usa o escopo padrão do Spring, que é o Singleton, se eu não me engano… e o singleton não é compatível com o session…
o singleton é criado uma vez só no sistema, na primeira vez que é usado… o de session é criado a cada usuário do sistema, logo não dá pra fazer um singleton depender de um session scoped…
o segurança não precisa ser session, mas precisa ser de escopo menor (session, request ou prototype)
J
jvds
lucas nao entendi o que vc falou ai tem que ser de escopo ok mas nao precisa ser session ai vc diz, mas precisa ser de escopo menor (session,request ou prototype) ou seja o @Scope precisa colocar mas o (value=“session”) nao ?
Lucas_Cavalcanti
vc precisa colocar o @Scope, mas o value não precisa ser necessariamente session…
se faz sentido instanciar o bean 1 vez por usuário, deixe session, se faz sentido instanciar toda requisição, deixe request, se faz sentido instanciar toda hora, deixe prototype
J
jvds
Lucas Cavalcanti:
vc precisa colocar o @Scope, mas o value não precisa ser necessariamente session…
se faz sentido instanciar o bean 1 vez por usuário, deixe session, se faz sentido instanciar toda requisição, deixe request, se faz sentido instanciar toda hora, deixe prototype
Ok entendi valeu pela dica no meu caso seria melhor deixar session o que vc acha ?
Lucas_Cavalcanti
pode deixar session, mas não tenho certeza de qual é o seu caso
J
jvds
Ok obrigado !!!
Joao Vitor
Yokomizo
Estou tentando implementar isso também só que o joinpoint é um método do controller anotado com @Resource do vraptor3
tanto o controller como o aspect estão anotados como component… já tentei usar @Component do vraptor e do spring, mas não deu… tentei usar os 2 juntos, tbm não deu… tentei usar um em um e outro em outro, e também não vai…
primeira vez que tento fazer isso, então acho que posso ter pulado algum passo
Lucas_Cavalcanti
vc não deveria declarar o DefaultController no applicationContext…
talvez nem o seu aspect, teoricamente a anotação @Aspect jah faz a declaração…
a única coisa eh que talvez vc tenha que colocar alguma tag pra ele ler todas as anotações…
tenta procurar pela tag <…:component-scan base=“seu.base.package”/>, pois sem ela o spring não lê anotações
Yokomizo
Lucas,
resolvi usando @Component do vraptor no aspect e no controller… tirando esse arquivo context… acho que agora só estou usando spring via vraptor… mas agora estou com otro problema, mas eu já abri outro tópico. Valeu!
J
jvds
Desculpe a demora a responder passe o poste da outra duvida ai caso ainda nao resolveu.