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 | * | ... | ... |