2017-09-29 1 views
0

J'ai actuellement un serveur Spring avec Maven qui stocke un fichier KeyStore avec les clés privées des utilisateurs dans le package src/main/java/com.resource. Le problème est que lorsqu'une mise à jour de Maven est effectuée, le fichier keystore est réinitialisé et toutes les clés privées sont perdues. J'ai commencé à faire des recherches sur l'endroit où un fichier keystore devrait être placé et trouvé Apaches documentation on handling keystore files mais comment accéder à ce fichier à partir du code de servlet lorsque j'ai besoin de mettre ou d'obtenir une clé? Parce que ce n'est pas dans la portée de Tomcat.Ressort accédant au fichier keystore

Est-ce la convention correcte lorsqu'il s'agit de fichiers de magasin de clés à placer dans "%JAVA_HOME%\bin\keytool"?

Actuellement pour accéder au fichier keystore avec dans le répertoire des ressources que je fais:

ApplicationContext appContext = new ClassPathXmlApplicationContext(); 
Resource resource = appContext.getResource("classpath:com/resources/" +fileName); 
((ClassPathXmlApplicationContext) appContext).close(); 
InputStream inpusStream = resource.getInputStream(); 
KeyStore keyStore = null; 
try { 
    keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); 
    keyStore.load(inpusStream, <Password for JKS file>); 
} finally { 
    if (inpusStream != null) 
     inpusStream.close(); 
} 

Répondre

1

Tout ce que vous mettez dans src/main/ressources se fait empaqueté dans le pot, comme l'indique Andrea. Cependant, cela signifie également que chaque fois que vous réemballez et déployez votre pot, vous perdez les modifications apportées à ces fichiers, comme vous l'avez remarqué.

Si vous exécutez votre service sur un seul hôte, déployez le keystore java sur le système de fichiers et informez votre application java de son emplacement via une propriété. Si vous envisagez de le déployer dans un cluster, vous souhaiterez probablement conserver ces clés dans une base de données. En outre, juste pour que vous le sachiez, JAVA_HOME/bin/keytool est un binaire utilisé pour gérer les clés et les certificats (par exemple, utilisez cet outil pour créer un fichier JKS).

+0

Merci, c'est ce que j'avais besoin de savoir. J'ai fini par aller avec l'option de système de fichiers. – develop1

0

au bon endroit pour chaque fichier de ressources est sous « src/main/ressources », puis mettre une section de ressources dans votre pom fichier comme ceci:

<build> 
     <resources> 
      <resource> 
       <filtering>false</filtering> 
       <directory>src/main/resources</directory> 
      </resource> 
      <resource> 
       <filtering>false</filtering> 
       <directory>src/main/java</directory> 
       <includes> 
        <include>**</include> 
       </includes> 
       <excludes> 
        <exclude>**/*.java</exclude> 
       </excludes> 
      </resource> 
    ... 
+0

Alors, comment pourriez-vous accéder de manière pragmatique au répertoire 'src/main/resources'? – develop1

+0

https://stackoverflow.com/a/27703645/1571602 –

+0

Cette solution ne fonctionnera pas, car le fichier keystore continuera d'être réinitialisé chaque fois que le projet est déployé. – develop1