Commit 00286f74a3d7c5b805a3050c17dc8721217eb125
1 parent
04a6ed49
Exists in
master
[4583] - Assinar documento digital.
Showing
4 changed files
with
145 additions
and
14 deletions
Show diff stats
cit-ecm-api/src/main/java/br/com/centralit/api/model/DocumentoGed.java
... | ... | @@ -120,6 +120,12 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable { |
120 | 120 | @Type(type = "org.hibernate.type.BinaryType") |
121 | 121 | private byte[] conteudoCriptografado; |
122 | 122 | |
123 | + /** Atributo conteudoAssinado. */ | |
124 | + @Lob | |
125 | + @Basic(fetch = FetchType.LAZY) | |
126 | + @Type(type = "org.hibernate.type.BinaryType") | |
127 | + private byte[] conteudoAssinado; | |
128 | + | |
123 | 129 | /** Atributo icon. */ |
124 | 130 | @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class, ViewsEcm.ClassificacaoDocumentoGedView.class }) |
125 | 131 | private String icon; |
... | ... | @@ -1070,4 +1076,24 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable { |
1070 | 1076 | this.tresAssinaturas = tresAssinaturas; |
1071 | 1077 | } |
1072 | 1078 | |
1079 | + /** | |
1080 | + * Retorna o valor do atributo <code>conteudoAssinado</code> | |
1081 | + * | |
1082 | + * @return <code>byte[]</code> | |
1083 | + */ | |
1084 | + public byte[] getConteudoAssinado() { | |
1085 | + | |
1086 | + return conteudoAssinado; | |
1087 | + } | |
1088 | + | |
1089 | + /** | |
1090 | + * Define o valor do atributo <code>conteudoAssinado</code>. | |
1091 | + * | |
1092 | + * @param conteudoAssinado | |
1093 | + */ | |
1094 | + public void setConteudoAssinado(byte[] conteudoAssinado) { | |
1095 | + | |
1096 | + this.conteudoAssinado = conteudoAssinado; | |
1097 | + } | |
1098 | + | |
1073 | 1099 | } | ... | ... |
cit-ecm-api/src/main/java/br/com/centralit/api/service/AssinaturaUtilService.java
1 | 1 | package br.com.centralit.api.service; |
2 | 2 | |
3 | +import java.security.NoSuchAlgorithmException; | |
4 | + | |
3 | 5 | /** |
4 | 6 | * <p> |
5 | 7 | * <img src="http://centralit.com.br/images/logo_central.png"> |
... | ... | @@ -53,4 +55,42 @@ public interface AssinaturaUtilService { |
53 | 55 | */ |
54 | 56 | byte[] geraAssinatura(byte[] conteudo) throws Exception; |
55 | 57 | |
58 | + /** | |
59 | + * <p> | |
60 | + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a> | |
61 | + * </p> | |
62 | + * | |
63 | + * <p> | |
64 | + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a> | |
65 | + * </p> | |
66 | + * | |
67 | + * Método responsável por gerar o hash do documento | |
68 | + * | |
69 | + * @author rogerio.costa | |
70 | + * | |
71 | + * @param doc | |
72 | + * @return | |
73 | + * @throws NoSuchAlgorithmException | |
74 | + */ | |
75 | + byte[] gerarHash(byte[] doc) throws NoSuchAlgorithmException; | |
76 | + | |
77 | + /** | |
78 | + * <p> | |
79 | + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a> | |
80 | + * </p> | |
81 | + * | |
82 | + * <p> | |
83 | + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a> | |
84 | + * </p> | |
85 | + * | |
86 | + * Método responsável por por gerar o hash do documento | |
87 | + * | |
88 | + * @author rogerio.costa | |
89 | + * | |
90 | + * @param doc | |
91 | + * @return | |
92 | + * @throws NoSuchAlgorithmException | |
93 | + */ | |
94 | + String gerarHash(String doc) throws NoSuchAlgorithmException; | |
95 | + | |
56 | 96 | } | ... | ... |
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/AssinaturaUtilServiceImpl.java
... | ... | @@ -214,11 +214,63 @@ public class AssinaturaUtilServiceImpl implements AssinaturaUtilService { |
214 | 214 | */ |
215 | 215 | public byte[] gerarHash(byte[] doc) throws NoSuchAlgorithmException { |
216 | 216 | |
217 | - MessageDigest md = MessageDigest.getInstance("MD5"); | |
217 | + MessageDigest md = MessageDigest.getInstance("SHA-1"); | |
218 | 218 | |
219 | 219 | md.update(doc); |
220 | 220 | |
221 | 221 | return md.digest(); |
222 | 222 | } |
223 | 223 | |
224 | + /** | |
225 | + * <p> | |
226 | + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a> | |
227 | + * </p> | |
228 | + * | |
229 | + * <p> | |
230 | + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a> | |
231 | + * </p> | |
232 | + * | |
233 | + * Método responsável por por gerar o hash do documento | |
234 | + * | |
235 | + * @author rogerio.costa | |
236 | + * | |
237 | + * @param doc | |
238 | + * @return | |
239 | + * @throws NoSuchAlgorithmException | |
240 | + */ | |
241 | + public String gerarHash(String doc) throws NoSuchAlgorithmException { | |
242 | + | |
243 | + MessageDigest digest = MessageDigest.getInstance("SHA-1"); | |
244 | + | |
245 | + digest.update(doc.getBytes()); | |
246 | + | |
247 | + return convertByteArrayToHexString(digest.digest()); | |
248 | + } | |
249 | + | |
250 | + /** | |
251 | + * <p> | |
252 | + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a> | |
253 | + * </p> | |
254 | + * | |
255 | + * <p> | |
256 | + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a> | |
257 | + * </p> | |
258 | + * | |
259 | + * Método responsável por converter byte para String | |
260 | + * | |
261 | + * @author rogerio.costa | |
262 | + * | |
263 | + * @param arrayBytes | |
264 | + * | |
265 | + * @return String | |
266 | + */ | |
267 | + private static String convertByteArrayToHexString(byte[] arrayBytes) { | |
268 | + | |
269 | + StringBuffer stringBuffer = new StringBuffer(); | |
270 | + for (int i = 0; i < arrayBytes.length; i++) { | |
271 | + stringBuffer.append(Integer.toString(( arrayBytes[i] & 0xff ) + 0x100, 16).substring(1)); | |
272 | + } | |
273 | + return stringBuffer.toString(); | |
274 | + } | |
275 | + | |
224 | 276 | } | ... | ... |
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/TarjaAssinaturaServiceImpl.java
... | ... | @@ -19,6 +19,7 @@ import br.com.centralit.api.model.Assinatura; |
19 | 19 | import br.com.centralit.api.model.ConteudoTarja; |
20 | 20 | import br.com.centralit.api.model.TarjaAssinatura; |
21 | 21 | import br.com.centralit.api.service.AnexoImagemService; |
22 | +import br.com.centralit.api.service.AssinaturaUtilService; | |
22 | 23 | import br.com.centralit.api.service.DominioService; |
23 | 24 | import br.com.centralit.api.service.OrganizacaoService; |
24 | 25 | import br.com.centralit.api.service.TarjaAssinaturaService; |
... | ... | @@ -65,6 +66,10 @@ public class TarjaAssinaturaServiceImpl extends GenericServiceImpl<TarjaAssinatu |
65 | 66 | |
66 | 67 | private TarjaAssinaturaDao tarjaAssinaturaDao; |
67 | 68 | |
69 | + /** Atributo assinaturaUtilService. */ | |
70 | + @Autowired | |
71 | + private AssinaturaUtilService assinaturaUtilService; | |
72 | + | |
68 | 73 | @Autowired |
69 | 74 | private DominioService dominioService; |
70 | 75 | |
... | ... | @@ -162,23 +167,21 @@ public class TarjaAssinaturaServiceImpl extends GenericServiceImpl<TarjaAssinatu |
162 | 167 | */ |
163 | 168 | private String getConteudoTarja(Assinatura assinatura, String conteudoAssinatura, TarjaAssinatura tarjaAssinatura) { |
164 | 169 | |
165 | - conteudoAssinatura = conteudoAssinatura.replaceAll(TarjaAssinatura.NOME_ASSINANTE, assinatura.getPessoa().getNome()) | |
166 | - .replaceAll(TarjaAssinatura.FUNCAO_ASSINANTE, assinatura.getFuncao().getNome()) | |
167 | - .replaceAll(TarjaAssinatura.DATA_ASSINATURA, UtilDate.getDataSemHorasString(Calendar.getInstance().getTime())) | |
168 | - .replaceAll(TarjaAssinatura.HORA_ASSINATURA, UtilDate.getHoraAtualHHMMSS()) | |
169 | - .replaceAll(TarjaAssinatura.LOGO, getStringBase64(tarjaAssinatura)); | |
170 | + conteudoAssinatura = conteudoAssinatura.replaceAll(TarjaAssinatura.NOME_ASSINANTE, assinatura.getPessoa().getNome()).replaceAll(TarjaAssinatura.FUNCAO_ASSINANTE, assinatura.getFuncao().getNome()).replaceAll(TarjaAssinatura.DATA_ASSINATURA, UtilDate.getDataSemHorasString(Calendar.getInstance().getTime())).replaceAll(TarjaAssinatura.HORA_ASSINATURA, UtilDate.getHoraAtualHHMMSS()).replaceAll(TarjaAssinatura.LOGO, getStringBase64(tarjaAssinatura)); | |
170 | 171 | return conteudoAssinatura; |
171 | 172 | } |
172 | - | |
173 | + | |
173 | 174 | /** |
174 | 175 | * Método responsável por obter string em formato Base64 para apresentação no html |
176 | + * | |
175 | 177 | * @author rogerio.cassimiro |
176 | 178 | * @param assinatura |
177 | 179 | * @return {@link String} |
178 | 180 | */ |
179 | 181 | private String getStringBase64(TarjaAssinatura tarjaAssinatura) { |
182 | + | |
180 | 183 | StringBuilder imgBase64 = new StringBuilder(""); |
181 | - if(tarjaAssinatura.getConteudo().contains("@logo@") && UtilObjeto.isReferencia(tarjaAssinatura.getAnexoImagem()) && UtilObjeto.isReferencia(tarjaAssinatura.getAnexoImagem().getAnexo())){ | |
184 | + if (tarjaAssinatura.getConteudo().contains("@logo@") && UtilObjeto.isReferencia(tarjaAssinatura.getAnexoImagem()) && UtilObjeto.isReferencia(tarjaAssinatura.getAnexoImagem().getAnexo())) { | |
182 | 185 | imgBase64.append("<img src='data:image/png;base64, "); |
183 | 186 | imgBase64.append(UtilBase64.byteToBase64(tarjaAssinatura.getAnexoImagem().getAnexo())); |
184 | 187 | imgBase64.append("' height='60' width='60' />"); |
... | ... | @@ -193,11 +196,11 @@ public class TarjaAssinaturaServiceImpl extends GenericServiceImpl<TarjaAssinatu |
193 | 196 | * @param assinatura |
194 | 197 | * @param tarjaAssinatura |
195 | 198 | * @param conteudoAssinatura |
196 | - * @throws DocumentException | |
197 | - * @throws IOException | |
199 | + * @throws DocumentException | |
200 | + * @throws IOException | |
198 | 201 | */ |
199 | 202 | private void gerarAssinaturaDocAnexo(Assinatura assinatura, AnexoImagem anexoImagem, String conteudoAssinatura) { |
200 | - | |
203 | + | |
201 | 204 | assinatura.getConteudoTarja().setConteudoCriptografado(this.encrypted(conteudoAssinatura)); |
202 | 205 | assinatura.getConteudoTarja().setAnexoImagem(anexoImagem); |
203 | 206 | } |
... | ... | @@ -213,7 +216,7 @@ public class TarjaAssinaturaServiceImpl extends GenericServiceImpl<TarjaAssinatu |
213 | 216 | private void gerarAssinaturaDocOnline(Assinatura assinatura, AnexoImagem anexoImagem, String conteudoAssinatura) { |
214 | 217 | |
215 | 218 | StringBuilder conteudoOriginalDocOnLine = new StringBuilder(); |
216 | - | |
219 | + | |
217 | 220 | if (UtilObjeto.isReferencia(assinatura.getDocumentoGed().getConteudoTarja())) { |
218 | 221 | conteudoOriginalDocOnLine.append(decrypted(assinatura.getDocumentoGed().getConteudoTarja().getConteudoCriptografado())); |
219 | 222 | } else { |
... | ... | @@ -221,9 +224,19 @@ public class TarjaAssinaturaServiceImpl extends GenericServiceImpl<TarjaAssinatu |
221 | 224 | conteudoOriginalDocOnLine.append(decrypted(assinatura.getDocumentoGed().getConteudoCriptografado())); |
222 | 225 | } |
223 | 226 | conteudoOriginalDocOnLine.append("<br />").append(conteudoAssinatura); |
224 | - assinatura.getDocumentoGed().getConteudoTarja().setConteudoCriptografado(this.encrypted(conteudoOriginalDocOnLine.toString())); | |
227 | + try { | |
228 | + // Assinar documento | |
229 | + assinatura.getDocumentoGed().setConteudoAssinado(this.assinaturaUtilService.geraAssinatura(conteudoOriginalDocOnLine.toString().getBytes())); | |
230 | + | |
231 | + conteudoOriginalDocOnLine.append("<br />").append(this.assinaturaUtilService.gerarHash(conteudoOriginalDocOnLine.toString())); | |
232 | + | |
233 | + assinatura.getDocumentoGed().getConteudoTarja().setConteudoCriptografado(this.encrypted(conteudoOriginalDocOnLine.toString())); | |
234 | + | |
235 | + } catch (Exception e) { | |
236 | + e.printStackTrace(); | |
237 | + } | |
225 | 238 | } |
226 | - | |
239 | + | |
227 | 240 | /** |
228 | 241 | * Método responsável por criptografar o texto através da chave |
229 | 242 | * | ... | ... |