DEV/JAVA
spring boot + jasypt
초록매실원액
2017. 9. 15. 17:45
Unsupported major.minor version 52.0
jasype 연동시 위와 같은 오류가 발생하면
1.jdk 버전을 1.8로 올리거나
2.jdk 버전에 맞은 version 을 찾는다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Caused by: java.lang.UnsupportedClassVersionError: com/ulisesbocchio/jasyptspringboot/EnableEncryptablePropertySourcesPostProcessor : Unsupported major.minor version 52.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:800) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) at java.net.URLClassLoader.access$100(URLClassLoader.java:71) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) at org.springframework.util.ClassUtils.forName(ClassUtils.java:250) at org.springframework.boot.SpringApplication.createSpringFactoriesInstances(SpringApplication.java:405) ... 7 more | cs |
pom.xml
1 2 3 4 5 6 | <!-- jasypt --> <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>1.5-java7</version> </dependency> | cs |
maven Repository
https://mvnrepository.com/artifact/org.jasypt/jasypt
application.java
- @EnbleEncryptableProperties
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | package ms; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.support.SpringBootServletInitializer; import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties; @EnableEncryptableProperties @SpringBootApplication @EnableAutoConfiguration(exclude={DataSourceTransactionManagerAutoConfiguration.class , DataSourceAutoConfiguration.class }) public class Application extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(Application.class); } public static void main(String[] args) throws Exception { SpringApplication.run(Application.class, args); } } | cs |
DatabaseConfig.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | package ms; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.SQLException; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; import org.apache.ibatis.session.SqlSessionFactory; import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; @Configuration @EnableTransactionManagement @MapperScan("ms.persistence") public class DatabaseConfig { @Bean(destroyMethod="close") DataSource dataSource(Environment env) throws SQLException, FileNotFoundException, IOException { StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); encryptor.setPassword("pwkey"); String decEnvUsername = encryptor.decrypt(env.getProperty("oracle.username")); String decEnvPwd = encryptor.decrypt(env.getProperty("oracle.password")); String envDriverClassName = env.getProperty("oracle.driverClassName"); String envUrl = env.getProperty("oracle.url"); BasicDataSource ret = new BasicDataSource(); ret.setDriverClassName(envDriverClassName); ret.setUsername(decEnvUsername); ret.setPassword(decEnvPwd); ret.setUrl(envUrl); return ret; } @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource); Resource[] arrResource = new PathMatchingResourcePatternResolver() .getResources("classpath:mapper/*.xml"); sqlSessionFactoryBean.setMapperLocations(arrResource); return sqlSessionFactoryBean.getObject(); } @Bean public DataSourceTransactionManager transactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } } | cs |
application.properties
1 2 3 4 5 6 | oracle.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy oracle.url=jdbc:log4jdbc:oracle:thin:@127.0.0.1:1521:xe oracle.username=2KvE1Uj9V1glieN2po522sjug== oracle.password=Se+621aELz1HA0TjTIDm2RtEg== | cs |
정상적으로 jasypt 사용할땐
oracle.ousername=ENC(2KvEUj9VglieN2po52sjug==) 이렇게 ENC로 감싸야하나
Spring boot bean 생성시 문제가 발생해서 ENC를 빼고 작성하였다.
Enc.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; public class Enc{ public static void main(String[] args) { StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); encryptor.setPassword("pwkey"); String username = encryptor.encrypt("muser"); String password = encryptor.encrypt("mpwer1234"); System.out.println("username : " + username); System.out.println("password : " + password); System.out.println("username(dec) : " + encryptor.decrypt(username)); System.out.println("password(dec) : " + encryptor.decrypt(password)); } } | cs |