Problème acces EJB distants
Bonjour,
J'ai un problème que je n'arrive pas à résoudre depuis 2 jours maintenant, je ne trouve pas réponse sur le web si ce n'est :
Citation:
Principal propagation: Cannot find principal information in subject
Description : Cannot find principal information in the subject. The security mechanisms are trying to extract the principal from the subject.
Action : Check client authentication token propagated. Also refer to security documentation for supported security mechanisms.
Ma config est :
2 serveurs glassfish V2, le premier est sur mon ordi local avec le conteneur d'EJB metier et l'autre est sur une machine virtuelle et contient me EJB-WebService qui font appel à mes EJB metiers.
Lorsque je teste tout en déployant sur mon poste local, cela marche, mais lorsque je teste le WebService quand il est deployé sur la machine virtuelle, cela ne marche pas et dans les logs j'ai droit à l'erreur décrite ci-dessus.
Voici mes EJB et fichiers de cfg :
EJB-WS :
Code:
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
|
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ecml.tchat.ejb.ws;
import ecml.tchat.ejb.interfaces.ISiteClient;
import ecml.tchat.metier.SiteClient;
import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.servlet.http.HttpServletRequest;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;
/**
*
* @author Denis
*/
@Stateless
@WebService(serviceName="SiteClientService")
public class SiteClientWSBean {
@Resource
private WebServiceContext _wsContext;
@EJB(name="ISiteClient")
private ISiteClient _siteClientEJB;
/**
*
* @return
*/
private String getIpClient() {
MessageContext mc = _wsContext.getMessageContext();
HttpServletRequest req = (HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST);
return req.getRemoteAddr();
}
/**
*
* @param dns
* @return
*/
@WebMethod
public Long getIdSiteClient(String dns) {
if(dns!=null && !dns.equals("")){
SiteClient site = _siteClientEJB.getSiteByDns(dns);
if(site != null && getIpClient().equals(site.getIp())) {
return site.getId();
}
else return null;
}
else return null;
}
} |
puis le sun-ejb-jar.xml de mon EJB-WS :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 EJB 3.0//EN" "http://www.sun.com/software/appserver/dtds/sun-ejb-jar_3_0-0.dtd">
<sun-ejb-jar>
<enterprise-beans>
<name>TCHAT-EJB-WS</name>
<ejb>
<ejb-name>SiteClientWSBean</ejb-name>
<ejb-ref>
<ejb-ref-name>ISiteClient</ejb-ref-name>
<jndi-name>corbaname:iiop:172.16.10.180:3700#ecml.tchat.ejb.interfaces.ISiteClient</jndi-name>
</ejb-ref>
</ejb>
</enterprise-beans>
</sun-ejb-jar> |
Puis mon EJB-Metier :
Code:
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
|
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ecml.tchat.ejb.dao;
import ecml.tchat.ejb.interfaces.ISiteClient;
import ecml.tchat.metier.SiteClient;
import java.util.List;
//import javax.annotation.security.RolesAllowed;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
/**
*
* @author Denis
*/
@Stateless
public class SiteClientBean implements ISiteClient {
@PersistenceContext
private EntityManager _em;
/**
*
* @param ip
* @param dns
* @param nomdesc
* @return
*/
// @RolesAllowed("admin")
public Boolean createSite(String ip, String dns, String nomdesc) {
// Si l'Ip et le dns ne sont pas déjà référencées
try {
SiteClient obj = new SiteClient(dns, ip, nomdesc);
_em.persist(obj);
return true;
}catch (Exception ex){
return false;
}
}
/**
*
* @param dns
* @return
*/
public SiteClient getSiteByDns(String dns) {
try {
SiteClient site = (SiteClient) _em.createQuery("SELECT tab FROM SiteClient tab WHERE tab._dns=:dnsSite").setParameter("dnsSite", dns).getSingleResult();
return site;
}catch (Exception ex){
//NonUniqueResultException - if there is no result
//NoResultException - if more than one result
//IllegalStateException - if called for a Java Persistence query language UPDATE or DELETE statement
System.err.println("getSiteByDns" + ex.getMessage() + "\n\n" + ex.getStackTrace());
return null;
}
}
/**
*
* @param id
* @param ip
* @param dns
* @param nomdesc
* @return
*/
// @RolesAllowed("admin")
public Boolean updateSite(Long id, String ip, String dns, String nomdesc) {
if(id!=null){
try {
SiteClient obj = this.getSiteClient(id);
obj.setDns(dns);
obj.setDns(ip);
obj.setNomDesc(nomdesc);
return true;
}catch (Exception ex) {
return false;
}
}else return false;
}
/**
*
* @param id
*/
// @RolesAllowed("admin")
public void deleteSite(Long id) {
_em.remove(getSiteClient(id));
}
/**
*
* @return
*/
// @RolesAllowed("admin")
public List<SiteClient> getSites() {
return _em.createQuery("SELECT tab FROM SiteClient tab ORDER BY tab._dns").getResultList();
}
/**
*
* @param id
* @return
*/
public SiteClient getSiteClient(Long id) {
return _em.find(SiteClient.class, id);
}
} |
Enfin mon sun-ejb-jar.xml partie metier :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 EJB 3.0//EN" "http://www.sun.com/software/appserver/dtds/sun-ejb-jar_3_0-0.dtd">
<sun-ejb-jar>
<enterprise-beans>
<name>TCHAT-EJB</name>
<ejb>
<ejb-name>SiteClientBean</ejb-name>
</ejb>
</enterprise-beans>
</sun-ejb-jar> |
J'ai vraiment besoin d'aide assez rapidement si possible.
Merci d'avance
PS: n'hesitez pas si vous avez besoins de precisions