Peut etre que le web.xml est mal configuré ?
Peut etre que le web.xml est mal configuré ?
Pour ma part, j'ai reteste en dezippant l'archive telle quelle (j'avais fait quelques refactoring pour tester des trucs). Et ca a donne ca, donc le probleme devrait etre le meme pour tout le monde non ?
Ou alors j'ai decidement pas de chance
Salut,
Tout d'abord felicitations pour l'article!
Je développe une application GWT 2.0 - GXT (ExtGWT) - GWT-SL.
J'essaye ainsi de mettre en place la sécurité avec Spring security.
Je configure un des mes services avec l'annotation @Secured("ROLE_ADMIN"). Puis j'essaye d'accéder à ce service en étant loggé comme User et l'exception suivante est levée :
Mes fichiers sont-ils mal configurés ou dois-je surcharger la méthode "handleExporterProcessingException" dans la classe "GWTRPCSecuredServiceExporter" pour attraper l'exception?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 [WARN] Exception while dispatching incoming RPC call java.lang.RuntimeException: com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract com.extjs.gxt.ui.client.data.PagingLoadResult com.webtiss.avenance.demo.client.action.DriverAction.getAll(com.extjs.gxt.ui.client.data.PagingLoadConfig) throws com.webtiss.avenance.demo.client.exception.ServiceSecurityException' threw an unexpected exception: org.springframework.security.AccessDeniedException: Access is denied at org.gwtwidgets.server.spring.GWTRPCServiceExporter.handleExporterProcessingException(GWTRPCServiceExporter.java:384) at com.webtiss.avenance.demo.server.spring.GWTRPCSecuredServiceExporter.handleExporterProcessingException(GWTRPCSecuredServiceExporter.java:43) at org.gwtwidgets.server.spring.GWTRPCServiceExporter.processCall(GWTRPCServiceExporter.java:353) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:224) at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) at org.gwtwidgets.server.spring.GWTRPCServiceExporter.handleRequest(GWTRPCServiceExporter.java:407) at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:49) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511) ...
Dernière question, de quelle manière puis-je procéder pour afficher/cacher des parties de mon ihm en fonction du role loggé?
Merci
Tom
AccessIsDenied ca veut dire que ton utilisateur n'a pas le droit. C'est un problème Spring ça.
Pour attraper proprement l'exception au niveau IHM :
1 - l'exception doit être déclaré dans la partie cliente
2 - tu dois bien définir sur chaque interface Rpc qu'il throw cette exception
Perso je te conseille d'encapsuler toutes les exceptions au niveau du service Rpc pour ne renvoyé qu'une exception connu du côté client et qui puisse afficher des messages clair à l'utilisateur.
-------------------
Pour afficher / cacher en fonction du role de l'utilisateur :
1 - l'IHM doit connaitre ce role, donc tu dois envoyer côté client un objet qui représente ca et le garder en cache.
2 - Au moment où tu construis l'IHM, tu test le role et en fonction tu affiche ou non les éléments.
Ok merci pour ces réponses...
Une dernière chose peux-tu me mettre sur la voie pour gérer le cache au niveau client?
Merci
Tu fais référence à ta question :
C'est évoqué dans l'article. Tu peux utiliser un affichage conditionnel (mais du coup tu charges quand même une partie de l'IHM pour rien) ou alors tu peux utiliser des contrôles qui pourront se remplir dynamiquementDernière question, de quelle manière puis-je procéder pour afficher/cacher des parties de mon ihm en fonction du role loggé?
Par exemple un onglet d'un tab panel chargé par ajax :
- http://www.java2s.com/Code/Java/GWT/...anelExtGWT.htm
De plus j'ai pas suivi GWT 2.0 mais il était question de pouvoir charger des bouts de javascript tardivement ce qui permettait de charger des parties de l'IHM uniquement à la demande.
Bonjour tout le monde,
merci pour ce tutoriel Hugo. Je rencontre un souci mais j'ai sans doute loupé quelque chose: l'intégration du plugin maven-gwt. Je ne vois pas comment opérer, j'ai tenté l'import de tes projet dans mon eclipse en passant par Maven mais j'ai l'impression qu'il ne m'a pas importé le plugin maven-gwt (et le lien création d'un projet SmartGWT avec Maven est mort), du coup ça me pose problème (échec au moment du build Maven). J'avoue que je ne suis pas très familier avec Maven :/
Merci d'avance pour une éventuelle aide.
EDIT: bon, j'ai en gros identifié mon problème: mon jar pour maven-googlewebtoolkit-plugin-2.0-rc1 n'est pas bon. Malheureusement, je ne le retrouve pas dans http://gwt-maven.googlecode.com/svn/...p.gwt/plugins/. Je vais faire un tour chez codehaus
EDIT2: j'ai récupéré les sources du plugin sur http://gwt-maven.googlecode.com/svn/...p.gwt/plugins/ et ai produit un jar, grâce à Maven justement en taguant en RC1, ça semble mieux se passer au moment du lancement de cargo.
pourriez vous m'indiquer le lien afin de telecharger le projet svp
Merci pour ce bel article ! Il va m'être d'une grande utilité pour utiliser Spring Security ! (il y a cependant quelques adaptations à faire si on utilise Spring 3)
BREF, je suis en train de développer mon application GWT, non pas avec Magen, mais avec l'aide du plugin de Google pour Eclipse pour ce qui est de la structure du projet.
Je ne sais pas comment tu as fait pour pouvoir utiliser 2 fichiers de module gwt.xml !! Je dois également créer une page html de login puis une page html contenant l'entièreté de l'application => 2 gwt.xml pour pouvoir à chaque fois avoir un contenu différent sur chacune des pages.
Le problème est que je n'arrive pas à ce que Eclipse prenne en compte le second fichier gwt.xml... ET de fait, il ne crée pas le second fichier nocache.js . Il y a une configuration à faire ?
Quelqu'un a-t-il déjà rencontrer ce problème ? Hugo pourrait p-e m'aider...
Une solution serait d'utiliser les Hyperlink, mais cela ne me tente pas trop, surtout si je veux sécuriser l'accès à la page principale de l'application.
Merci
Je suis en train de monter une même architecture avec Spring 3 et je n'Arrive pas à faire marcher Spring Security. Les intercept-url ne semble pas avoir d'effet et je peux accéder à n'importe quelle page de mon application sans passer par le login. Par contre au niveau des services cela semble fonctionner car lors d'un appel si je ne me suis pas bien identifié avant il me dit qu'il n'a pas trouvé d'info d'autentification.
Est-ce que tu pourrais poster ton applicationContext-security (qui est je pense la clé du problème pour moi) ? Ou du moins me donner une piste des adaptations que tu as faites ?
Pour ça je dirais que lorsque tu lances la compilation de ton projet tu dois sélectionner tous les modules d'entrée (Entry Point Modules) tout simplement (dans la fenêtre de GWT Compile).
Pour ma part je rencontre aussi un autre problème avec Gilead. Je me retrouve encore avec l'exception concernant sur PersistentBag. Pourtant j'ai bien recalqué toute la configuration, je n'ai aucune erreur de compilation ou quoi mais impossible de communiquer avec le service des projets... Là encore, toute aide serait la bienvenue
En tout cas un grand merci à Hugo pour avoir partagé ce super tuto sur la mise en place d'une solution complète autour de GWT
Voici mon adaptation pour le applicationContext-Security.xml :
J'ai exactement le même problème que toi, même avec l'adaptation a Spring 3.1. Je peux accéder à la page protégée cvuman.html sans même être identifié => sans avoir de rôle... Par contre, la sécurité liée aux appels RPC semble fonctionner... Je suis preneur aussi d'une explication.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:security="http://www.springframework.org/schema/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"> <security:http entry-point-ref="authenticationEntryPoint" auto-config="true" create-session="always" access-denied-page="/index.html" > <security:intercept-url pattern="/cvuman.html" access="ROLE_ADMIN"/> <security:form-login login-page="/index.html" default-target-url='/cvuman.html' always-use-default-target='true'/> <security:session-management session-fixation-protection="none"> <security:concurrency-control error-if-maximum-exceeded="true" max-sessions="1"/> </security:session-management> </security:http> <bean id="authenticationEntryPoint" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint"> <property name="loginFormUrl" value="/index.html"/> <property name="forceHttps" value="false"/> </bean> <bean id="dummyAuthenticationProvider" class="be.ac.ulg.security.core.DummyAuthenticationProvider"> </bean> <security:authentication-manager alias="authenticationManager"> <security:authentication-provider ref="dummyAuthenticationProvider"/> </security:authentication-manager> <security:global-method-security secured-annotations="enabled" jsr250-annotations="disabled" /> </beans>
Ah, c'était tout simple... Merci à toi J'utilisais le Run as Web Application pour compiler. Ici avec GWT Compile, ça prend beaucoup plus de temps mais ça fonctionne !
Si vous souhaitez sécuriser vos page sans forcément utiliser spring-security vous trouverez un exemple de sécurisation par un simple filtre http sur le svn du framework http://gwtop.tuxfamily.org/
En gros j'utilise un simple filtre http (SecurityFilter) sur l'ensemble des requetes. En général, dedans j'implémente une authetifiaction par websso. Mais on peut implémenter ce que l'on veut en fait.
Ensuite, une fois que l'utilisateur à été setter dans un threadLocal j'utilise l'aop pour gérer les droits d'accès aux services avec des annotations @RolesAllowed que j'introspect dans mon aop.
Merci, je vais me lancer dans le comparatif et qui sait peut être trouvera-t-on la réponse au fait qu'on peut accéder à toutes les pages de nos applis...
Si tu veux pas tout recompiler à chaque fois, tu vas dans les run configurations d'Éclipse, tu sélectionnes ton app google et tu as un onglet GWT dans lequel tu peux pareillement sélectionner les modules à prendre en compte et lancer.
Quand à moi je rattaque ma bataille sur le PersitentBag d'Hibernate... Si quelqu'un a une idée
Ça pourrait certainement être plus simple en effet, j'ai même envisagé une autentification toute simple de Tomcat, mais que voulez vous, je suis libre de mettre ce que je veux dans l'appli que je commence alors autant en profiter pour essayer des choses encore inconnues
EDIT : J'ai re-regardé avec les yeux mieux ouverts et effectivement ça pourrait être intéressant de tester mais je ne peux point pour une raison conne : putain d'ordi de travail. Pas possible de faire de checkout du svn à cause du gentil proxy dont je connais pas les settings
Bon, ça avance tout doucement
J'ai enfin réussi à (presque) me débarrasser des histoires de PersistentBag de Hibernate. Pour ça, j'ai dû rajouter une propriété au bean proxyStore :
Depuis, je peux enregistrer des projets dans la base et les lire, mais malgré tout j'ai encore cette exception (PersitentBag) qui apparait. Je pense que c'est l'enregistrement de la liste d'auteurs dans la table project_authors qui marche pas, mais je ne vois pas comment régler le problème. Je pensait avoir réglé tout problème de sérialisation avec le changement ci-dessus, mais en fait non, tant pis on va chercher encore
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <bean id="proxyStore" class="net.sf.gilead.core.store.stateless.StatelessProxyStore"> <property name="proxySerializer"> <bean class="net.sf.gilead.core.serialization.GwtProxySerialization"/> </property> </bean>
Pour ce qui est de Spring Security par contre, pas d'avancée. Nos configurations sont identiques et j'ai testé pas mal de possibilités, les intercept-url ne prennent pas effet. Creusons encore un peu et on verra bien.
Pour regler le persistentBag tu dois utiliser la méthode clone de Gilead sur ton objet à serializer.
Le persistentBag est un proxy qu'hibernate applique à un attribut qui est défini en Lazy Loading.
Ce proxy ne peut pas être serialiser, il faut soit charger les objets réel, soit mettre cet attribut à null suivant si tu en as besoin ou pas côté client. C'est ce que fait la méthode clone du proxyStore de Gilead. Mais c'est un algo qui tu peux également appliqué à la main.
Allo !
Merci pour les explications autour du persistentBag. En fait je m'en suis finalement sorti en reprenant la configuration de zéro, et je me suis rendu compte que tout était de travers à la base Après avoir bien relu la doc de GWT-SL et Gilead, tout est rentré dans l'ordre.
Enfin, tout ou presque... J'ai encore un problème, toujours avec la fameuse liste d'auteurs, une basse histoire de ClassCastException. J'ai bien pris le temps d'en discuter avec notre amis Google, et j'ai testé toutes les solutions trouvées (changer de List en Set et autres) mais sans succès. Si quelqu'un a une autre piste, je suis preneur une fois encore
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136 2011-03-02 09:46:36,531 INFO [PersistentBeanManager] - Transient object : com.desjardins.dtp.cccms.model.Project@1f Hibernate: insert into PROJECT (DESCRIPTION, NAME, URL) values (?, ?, ?) 2011-03-02 09:46:36,563 ERROR [BeanPopulator] - propertyName=authors readerMethod=public java.util.Set com.desjardins.dtp.cccms.model.Project.getAuthors() setterMethod=public void com.desjardins.dtp.cccms.model.Project.setAuthors(java.util.Set) fromBean=com.desjardins.dtp.cccms.model.Project@29 toBean=com.desjardins.dtp.cccms.model.Project@29 java.lang.RuntimeException: java.lang.ClassCastException: net.sf.gilead.pojo.gwt.collection.MapParameter cannot be cast to java.lang.String at net.sf.gilead.core.beanlib.clone.ClonePropertyFilter.propagate(ClonePropertyFilter.java:219) at net.sf.beanlib.provider.BeanPopulator.doit(BeanPopulator.java:186) at net.sf.beanlib.provider.BeanPopulator.processSetterMethod(BeanPopulator.java:172) at net.sf.beanlib.provider.BeanPopulator.populate(BeanPopulator.java:269) at net.sf.beanlib.provider.replicator.ReplicatorTemplate.populateBean(ReplicatorTemplate.java:194) at net.sf.beanlib.provider.replicator.BeanReplicator.replicateBean(BeanReplicator.java:187) at net.sf.beanlib.hibernate3.Hibernate3JavaBeanReplicator.replicateBean(Hibernate3JavaBeanReplicator.java:71) at net.sf.gilead.core.beanlib.clone.CloneClassBeanReplicator.replicateBean(CloneClassBeanReplicator.java:129) at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicateByBeanReplicatable(ReplicatorTemplate.java:144) at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicate(ReplicatorTemplate.java:139) at net.sf.beanlib.provider.BeanTransformer.transform(BeanTransformer.java:231) at net.sf.beanlib.hibernate.HibernateBeanReplicator.copy(HibernateBeanReplicator.java:134) at net.sf.gilead.core.LazyKiller.clone(LazyKiller.java:258) at net.sf.gilead.core.LazyKiller.detach(LazyKiller.java:212) at net.sf.gilead.core.PersistentBeanManager.clonePojo(PersistentBeanManager.java:392) at net.sf.gilead.core.PersistentBeanManager.clone(PersistentBeanManager.java:254) at net.sf.gilead.gwt.GileadRPCHelper.parseReturnValue(GileadRPCHelper.java:157) at org.gwtwidgets.server.spring.gilead.GileadRPCServiceExporter.invokeMethodOnService(GileadRPCServiceExporter.java:151) at org.gwtwidgets.server.spring.GWTRPCServiceExporter.processCall(GWTRPCServiceExporter.java:403) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248) at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) at org.gwtwidgets.server.spring.GWTRPCServiceExporter.handleRequest(GWTRPCServiceExporter.java:472) at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:324) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) Caused by: java.lang.ClassCastException: net.sf.gilead.pojo.gwt.collection.MapParameter cannot be cast to java.lang.String at net.sf.gilead.pojo.java5.legacy.LightEntity.addProxyInformation(LightEntity.java:86) at net.sf.gilead.core.store.stateless.StatelessProxyStore.storeProxyInformations(StatelessProxyStore.java:152) at net.sf.gilead.core.beanlib.clone.ClonePropertyFilter.propagate(ClonePropertyFilter.java:209) ... 45 more [WARN] Exception while dispatching incoming RPC call java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassCastException: net.sf.gilead.pojo.gwt.collection.MapParameter cannot be cast to java.lang.String at org.gwtwidgets.server.spring.GWTRPCServiceExporter.handleExporterProcessingException(GWTRPCServiceExporter.java:449) at org.gwtwidgets.server.spring.GWTRPCServiceExporter.processCall(GWTRPCServiceExporter.java:418) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248) at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) at org.gwtwidgets.server.spring.GWTRPCServiceExporter.handleRequest(GWTRPCServiceExporter.java:472) at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:324) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) Caused by: java.lang.RuntimeException: java.lang.ClassCastException: net.sf.gilead.pojo.gwt.collection.MapParameter cannot be cast to java.lang.String at net.sf.gilead.core.beanlib.clone.ClonePropertyFilter.propagate(ClonePropertyFilter.java:219) at net.sf.beanlib.provider.BeanPopulator.doit(BeanPopulator.java:186) at net.sf.beanlib.provider.BeanPopulator.processSetterMethod(BeanPopulator.java:172) at net.sf.beanlib.provider.BeanPopulator.populate(BeanPopulator.java:269) at net.sf.beanlib.provider.replicator.ReplicatorTemplate.populateBean(ReplicatorTemplate.java:194) at net.sf.beanlib.provider.replicator.BeanReplicator.replicateBean(BeanReplicator.java:187) at net.sf.beanlib.hibernate3.Hibernate3JavaBeanReplicator.replicateBean(Hibernate3JavaBeanReplicator.java:71) at net.sf.gilead.core.beanlib.clone.CloneClassBeanReplicator.replicateBean(CloneClassBeanReplicator.java:129) at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicateByBeanReplicatable(ReplicatorTemplate.java:144) at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicate(ReplicatorTemplate.java:139) at net.sf.beanlib.provider.BeanTransformer.transform(BeanTransformer.java:231) at net.sf.beanlib.hibernate.HibernateBeanReplicator.copy(HibernateBeanReplicator.java:134) at net.sf.gilead.core.LazyKiller.clone(LazyKiller.java:258) at net.sf.gilead.core.LazyKiller.detach(LazyKiller.java:212) at net.sf.gilead.core.PersistentBeanManager.clonePojo(PersistentBeanManager.java:392) at net.sf.gilead.core.PersistentBeanManager.clone(PersistentBeanManager.java:254) at net.sf.gilead.gwt.GileadRPCHelper.parseReturnValue(GileadRPCHelper.java:157) at org.gwtwidgets.server.spring.gilead.GileadRPCServiceExporter.invokeMethodOnService(GileadRPCServiceExporter.java:151) at org.gwtwidgets.server.spring.GWTRPCServiceExporter.processCall(GWTRPCServiceExporter.java:403) ... 27 more Caused by: java.lang.ClassCastException: net.sf.gilead.pojo.gwt.collection.MapParameter cannot be cast to java.lang.String at net.sf.gilead.pojo.java5.legacy.LightEntity.addProxyInformation(LightEntity.java:86) at net.sf.gilead.core.store.stateless.StatelessProxyStore.storeProxyInformations(StatelessProxyStore.java:152) at net.sf.gilead.core.beanlib.clone.ClonePropertyFilter.propagate(ClonePropertyFilter.java:209) ... 45 more [ERROR] 500 - POST /application/ProjectService.rpc (127.0.0.1) 57 bytes Request headers Host: 127.0.0.1:8888 Connection: keep-alive Referer: http://127.0.0.1:8888/Application.html Accept: */* User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13 Accept-Encoding: gzip,deflate,sdch Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 Cookie: JSESSIONID=13xxiiv3yn0bj Content-Length: 258 Origin: http://127.0.0.1:8888 X-GWT-Module-Base: http://127.0.0.1:8888/application/ Content-Type: text/x-gwt-rpc; charset=UTF-8 X-GWT-Permutation: 0C1FB6348A1A3A8A097D80511B0F976C Response headers Content-Type: text/plain
Bon, quelques avancées dans ce monde de fous Fort de mon expérience avec GWT-SL / Gilead qui étaient configurés disons, de manière non optimale, je me suis attelé un peu à Spring Security (je tournais trop en rond avec les histoire de ClassCastException ci-dessus).
Le piste fût donc bonne puisque en redétaillant la configuration et en suivant une paire de tutos sur le net, je me suis rendu compte de deux choses :
1 - les balises filters du web.xml avaient foutu le camp (certainement lors d'un nettoyage de ma part un peu trop vigoureux...). J'ai donc remis les lignes suivantes :
2 - Mes règles "d'interception" dans le applicationContext-security.xml étaient fort probablement dans le mauvais ordre et trop restricitves, je suis donc revenu à de quoi de bien simple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Et là miracle, tout marche comme prévu Il ne me reste donc plus qu'une chose à régler, cette histoire de CastException. Avant d'autres aventures bien sûr
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <security:http entry-point-ref="authenticationEntryPoint" create-session="always" access-denied-page="/index.html"> <security:intercept-url pattern="/Application.html" access="ROLE_USER"/> <security:form-login login-page="/index.html" /> </security:http>
Wah! Merci beaucoup, ça marche bien ! J'avais un peu laissé tomber la sécurité pour le moment. J'ai un petit soucis de récupération d'une collection d'objets avec Gilead. C'est en fait le même problème que toi je pense, sauf que j'utilise un Set au lieu d'un Bag. La description de mon problème figure ici : http://www.developpez.net/forums/d10...t/#post5818486
Bonjour Hugo,
Je me prépare à commencer le développement d'un projet J2EE pour le développement d'une d'une gestion. Les outils seront GWT, SPRING et HIBERNATE. Si vous me donnez de petits conseils pour mener à bien mon développement. Exemple:
- Par quoi commencer, implémentation de la base données ou les interfaces?
- par quelle couche commencer?
- comment passez du diagramme de classe à la base de données?
Merciii infiniment ...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager