본문 바로가기
spring boot

Spring boot 유효성 검사 //해당하는 내역 보여주기. / Jasypt 암호화

by improve 2024. 3. 14.
@Pattern (regexp = "^[a-zA-Z0-0]*$", message = "사용자이름은 영어랑 숫자만 가능합니다.")

Dto에 Pattern 을 적어서 영어랑 숫자만 가능하게 한다.

 

======================= 해당하는 내역 보여주기=================================

 

● UserRepository

public List<User> findByUsernameContainingOrEmailContaining(String username,String email);

 

list 로 해당구문을 적는다.

 

●UserController

 

 

   @GetMapping("usernameemail")
    public ResponseEntity<List<User>> getAllUserName(@RequestBody UserDto userDto){
        List<User> list = userRepository.findByUsernameContainingOrEmailContaining(userDto.getUsername(),userDto.getEmail());
        return ResponseEntity.status(HttpStatus.OK).body(list);
}

 

이렇게 하면 json형식으로 지정한 값만 불러올 수 있다.

 

==================================jasypt============================================

 

 

packagre형식은 이렇게 했습니다.

 

 

우선 Edit Configurations.. 에 add VM options 를 눌러서

-Djasypt.encryptor.password=passw@rdpassw@rdpassw@rdpassw@rdpassw@rdpassw@rdpassw@rdpassw@rdpassw@rdpassw@rdpassw@rdpassw@rdpassw@rd

를 추가해준다.

 

<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.5</version>
</dependency>

 

이형식을 추가해준다.

 

우선 application 파일을 yml 파일로 바꿔준다.

 

 

●application.yml

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: ENC(65u6Bwx0lQY/Qd+4RHIgHCqKCuWvg/WDJ0/bEw58P/CFeSVuqIKsLi8daYUoe39CcRnOS34H3+mpaEnMBFqOHodPCDnyuVMt/leRIbO58lyKv2MErPeWC+n5jXZsRZ0809TFDK6sujWQghi1Rxjit9trbzylFJ7Bzo3JRFwsEHU=)
    #url: jdbc:mysql://112.228.211.194:3306/mh?useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=UTF-8&serverTimezone=UTC
    #url: jdbc:mysql://localhost:3307/mh?useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=UTF-8&serverTimezone=UTC
    #username: ENC(kJKZxiBvZ/36/js2QphSMA==)
    username: ENC(mZM85xKW7UKEuQAL7Riv5w==)
    password: ENC(S3GZTYnC45YzLE0HpI0MzA==)
    #password: ENC(UrnzNMv0uxnux53u7WKiHQ==)

  jpa:
    database: mysql
    database-platform: org.hibernate.dialect.MySQLDialect
    defer-datasource-initialization: true
    hibernate:
      ddl-auto: create-drop
    generate-ddl: true
    show-sql: true
    properties:
      hibernate:
        format_sql: true
  sql:
    init:
      mode: always

jasypt:
  encryptor:
    password: ${PASSWORD}

 

이형식은 암호화 한 형식이다.

 

 

●test.main.MyEncrytor 

파일을 만들어 준다.

package com.mh.restapi03;

import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

public class MyEncrytor {
    //    @Value("${jasypt.encryptor.password}")
    private String password = "passw@rdpassw@rdpassw@rdpassw@rdpassw@rdpassw@rdpassw@rdpassw@rdpassw@rdpassw@rdpassw@rdpassw@rdpassw@rd";

    @Test
    void name() {
        System.out.println("실행됩니다." + password);

        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        encryptor.setPoolSize(4);
        encryptor.setPassword(password);
        encryptor.setAlgorithm("PBEWithMD5ANdTripleDES");

        String content = "jdbc:mysql://localhost:3307/mh?useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=UTF-8&serverTimezone=UTC";
        String encString = encryptor.encrypt(content);
        String decString = encryptor.encrypt(encString);

        System.out.println(String.format("encString = %s decString = %s", encString, decString));


        content = "root";
        encString = encryptor.encrypt(content);
        decString = encryptor.encrypt(encString);

        System.out.println(String.format("encString = %s decString = %s", encString, decString));


        content = "1234";
        encString = encryptor.encrypt(content);
        decString = encryptor.encrypt(encString);

        System.out.println(String.format("encString = %s decString = %s", encString, decString));
    }

}

 

url 과 username 과 password 를 암호화 해준다.

 

 

●conf.JasyptConfig

package com.mh.restapi03.conf;

import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
import lombok.Getter;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

@Configuration
@EnableEncryptableProperties
public class JasyptConfig {
    @Value("${jasypt.encryptor.password}")
    String password;

    @Bean(name = "jasyptStringEncryptor")
    public PooledPBEStringEncryptor jasyptStringEncryptor() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        encryptor.setPoolSize(4);
        encryptor.setPassword(password);
        encryptor.setAlgorithm("PBEWithMD5ANdTripleDES");
        return encryptor;
    }

}

 

암호화의 기본 형식을 적어준다.