2017-11-18 7 views
0

실례합니다. 그 동안 나는 백엔드에서 springboot와 앞에서 각도 2로 전자 문서 관리를 개발합니다. 지금까지 내 데이터베이스의 다운로드 및 스토 케지는 잘 작동하지만 내 springboot에서 openssl 구현자를 사용한 암호화 및 암호 해독은 작동하지 않습니다.openssl을 springboot/mySql 및 dropzonejs와 함께 사용하는 방법

클래스는 FileUpload

@Table(name = "table_doc") 
@SuppressWarnings("serial") 
@Entity 
@Document(indexName = "tabledoc", type = "tabledoc") 
public class FileUpload implements Serializable { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Long id; 
private String filename; 

@Lob 
private byte[] file; 

private String mimeType; 

private Long size; 

public FileUpload(String filename, byte[] file, String mimeType, Long size) { 
    super(); 
    this.filename = filename; 
    this.file = file; 
    this.mimeType = mimeType; 
    this.size = size; 
} 
public FileUpload() { 
    super(); 
} 
public Long getId() { 
    return id; 
} 
public void setId(Long id) { 
    this.id = id; 
} 
public String getFilename() { 
    return filename; 
} 
public void setFilename(String filename) { 
    this.filename = filename; 
} 
public byte[] getFile() { 
    return file; 
} 
public void setFile(byte[] file) { 
    this.file = file; 
} 
public String getMimeType() { 
    return mimeType; 
} 
public void setMimeType(String mimeType) { 
    this.mimeType = mimeType; 
} 
public Long getSize() { 
    return size; 
} 
public void setSize(Long size) { 
    this.size = size; 
} 
} 

클래스 FileController :

@RequestMapping(value ="/uploadLobCrypt",method = RequestMethod.POST) 
public ResponseEntity <String> fileCrypt(MultipartHttpServletRequest request,MultipartFile multiPartFile) throws IOException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, InvalidKeySpecException { 
    Iterator<String> itr = request.getFileNames(); 
    String uploadedFile = itr.next(); 
    MultipartFile file = request.getFile(uploadedFile); 
    String mimeType = file.getContentType(); 
    String filename = file.getOriginalFilename(); 
    byte[] bytes = file.getBytes(); 
    Long size = file.getSize(); 
    FileUpload fileCrypte = new FileUpload(filename, bytes, mimeType,size); 
    fileLobService.fileCrypt(multiPartFile,fileCrypte); 
    return new ResponseEntity<String>("{}", HttpStatus.OK);  
} 

클래스 FileLobService

@Service("fileLobService") 
@Transactional 
public class FileLobService { 
@Autowired 
FileUploadRepository fileUploadRepository; 

// Retrouver un fichier 
public FileUpload findByFilename(String filename) { 
    return fileUploadRepository.findByFilename(filename); 
} 

public FileUpload findById(Long id) { 
    return fileUploadRepository.findById(id); 
} 

public Long deleteFileById(Long id) { 
    return fileUploadRepository.deleteFileById(id); 
} 

public String deleteFileByFilename(String filename) { 
    return fileUploadRepository.deleteFileByFilename(filename); 
} 

public void File(File file) { 
    fileUploadRepository.File(file); 
} 

// Upload the file 
public void uploadFile(FileUpload fileName) { 

    fileUploadRepository.saveAndFlush(fileName); 
} 

public void fileCrypt(MultipartFile multiPartFile, FileUpload fileCrypte) 
     throws IOException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, 
     IllegalBlockSizeException, BadPaddingException, InvalidKeySpecException { 

    // ecriture clee public et public dans un path 
    String publicKeyPath = "C:\\OpenSSL-Win64\\bin\\public.der"; 
    String privateKeyPath = "C:\\OpenSSL-Win64\\bin\\private.pk8"; 

    fileCrypte.setFile(multiPartFile.getBytes()); 
    fileCrypte.setFilename(multiPartFile.getOriginalFilename()); 
    fileCrypte.setMimeType(multiPartFile.getContentType()); 
    fileCrypte.setSize(multiPartFile.getSize()); 
    File file = new File(multiPartFile.getOriginalFilename()); 
    multiPartFile.transferTo(file); 
    byte[] dataBytes = FileUtils.readFileToByteArray(file); 
    Cryptage cryptage = new Cryptage(); 
    byte[] encryptedBytes = cryptage.encryptFile(dataBytes, publicKeyPath); 
    FileUtils.writeByteArrayToFile(file, encryptedBytes); 

    fileUploadRepository.saveCryptedFile(file); 
} 
} 

클래스 FileUploadRepository

public interface FileUploadRepository extends JpaRepository<FileUpload, Long> { 
FileUpload findByFilename(String filename); 

FileUpload findById(Long id); 

Long deleteFileById(Long id); 

String deleteFileByFilename(String filename); 

void File(File file); 

void saveCryptedFile(java.io.File file); 
} 

내가 서버를 시작할 때 지금, 나는 다음과 같은 스택 추적 얻을 :

Caused by: org.springframework.data.mapping.PropertyReferenceException: No 
property saveCryptedFile found for type FileUpload! 
at org.springframework.data.mapping.PropertyPath.<init> 
(PropertyPath.java:77) ~[spring-data-commons-1.13.7.RELEASE.jar:na] 
at 
org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:329) 
~[spring-data-commons-1.13.7.RELEASE.jar:na] 
at 
org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:309) 
~[spring-data-commons-1.13.7.RELEASE.jar:na] 
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:272) 
~[spring-data-commons-1.13.7.RELEASE.jar:na] 
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:243) 
~[spring-data-commons-1.13.7.RELEASE.jar:na] 
at org.springframework.data.repository.query.parser.Part.<init> 
(Part.java:76) ~[spring-data-commons-1.13.7.RELEASE.jar:na] 

은 당신이 다운로드 파일을 암호화 SpringBoot에 OpenSSL을 사용에 대한 어떤 생각을 가지고 수행을 내 MySQL 데이터베이스에 저장되기 전에 dropzonejs?

답변

0

방금 ​​문제가 발견되었습니다. 파일의 내용을 바이트 배열로 반환하십시오. 변경 될 때 암호화 클래스

클래스 FileController과 :

@RequestMapping(value ="/uploadLobCrypt",method = RequestMethod.POST) 

public ResponseEntity <String> fileCrypt(MultipartFile multiPartFile,MultipartHttpServletRequest request) throws IOException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, InvalidKeySpecException { 

    fileLobService.fileCrypt(multiPartFile, request); 

    return new ResponseEntity<String>("{}", HttpStatus.OK);  
} 

클래스 FileLobService

public void fileCrypt(MultipartFile 
multiPartFile,MultipartHttpServletRequest 
request) throws IOException, InvalidKeyException, NoSuchAlgorithmException, 
NoSuchPaddingException,IllegalBlockSizeException, 
BadPaddingException,InvalidKeySpecException { 

    // ecriture clee public et public dans un path 
    String publicKeyPath = "C:\\OpenSSL-Win64\\bin\\public.der"; 
    //String privateKeyPath = "C:\\OpenSSL-Win64\\bin\\private.pk8"; 

    Iterator<String> itr = request.getFileNames(); 

    String uploadedFile = itr.next(); 
    MultipartFile file = request.getFile(uploadedFile); 

    String mimeType = file.getContentType(); 
    String filename = file.getOriginalFilename(); 
    byte[] bytes = file.getBytes(); 
    Long size = file.getSize(); 

    Cryptage cryptage = new Cryptage(); 
    byte[] encryptedBytes = cryptage.encryptFile(bytes, publicKeyPath); 

    FileUpload fileUploaded = new FileUpload(filename, encryptedBytes, mimeType,size); 

    fileUploadRepository.saveAndFlush(fileUploaded); 

} 

참고 : 그것은 단지 우리가 SHA-256를 사용해야 큰 파일을 작은 파일 유용 메시지 다이제스트 알고리즘 이상