1. catalina.properties 내의 common_loader 부분에 경로 추가
common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar","/home/wasadm/scp"
- > 에러발생 org.apache.jasper.JasperException: java.lang.ClassNotFoundException:
2. catalina.properties 내의 server.loader 경로 추가
server.loader="/home/wasadm/scp"
- > 동일에러 발생
3. catalina.properties 내의 server.loader 경로 추가
server.loader=/home/wasadm/scp
- > 동일에러 발생
4. catalina.properties 내의 shared.loader 경로 추가
shared.loader=/home/wasadm/scp
- > 동일에러 발생
5. catalina.properties 내의 shared.loader 경로 추가
shared.loader=/home/wasadm/scp/scpdb.jar
Penta SCP API Example
java.class.path = /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
java.library.path = :/home/wasadm/scp:/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib
strInputPlain = 123456-1234567
ScpEncStr = 8C3A4B500A6DCBEF3F9D94FB606108D8
ScpDecStr = 123456-1234567
ScpEncB64 = QF6MOktQCm3L7z+dlPtgYQjY
ScpDecB64 = 123456-1234567
정상 출력됨.
6. mysql 접속을 위한 경로 추가 catalina.properties
shared.loader=/home/wasadm/scp/scpdb.jar,/home/wasadm/scp/mysql-connector-java-8.0.28.jar
기존 scp 가 안되버림.
/home/wasadm/scp/*.jar, /home/wasadm/scp 해도 안됨.
원복해도 기존 SCP가 안됨...
7. catalina.properties 의 설정 모두 삭제 후 .bash_profile 부분에 CLASSPATH 에 scp 설치경로 추가
server.loader 에 jar 경로 추가하여도 에러 발생
NoClassDefFoundError 발생
8. .bash_profile 에 LD_LIBRARY_PATH 에 scp 설치경로 추가
NoClassDefFoundError 발생
9. .bash_profile 에 LD_LIBRARY_PATH 에 scpdb.jar 파일 경로 추가
NoClassDefFoundError 발생
10. catalina.sh 내용중 JAVA_OPTS 부분에 -Djava.library.path=/home/wasadm/scp 경로 추가
NoClassDefFoundError 발생
11. .bash_profile 에 JAVA_OPTS 추가
export JAVA_OPTS="-Djava.library.path=/home/wasadm/scp"
NoClassDefFoundError 발생
12. shared.loader 에 /home/wasadm/scp/*.jar 로 설정
Penta SCP API Example
java.class.path = /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
java.library.path = /home/wasadm/scp
strInputPlain = 123456-1234567
ScpEncStr = 8C3A4B500A6DCBEF3F9D94FB606108D8
ScpDecStr = 123456-1234567
ScpEncB64 = QF6MOktQCm3L7z+dlPtgYQjY
ScpDecB64 = 123456-1234567
ScpEncFile = 0
ScpDecFile = 0
ScpHashStr = 0A21743F3E939F23A21127DAB4AA31ECDB3952A2E258A85CB89A9E5583B2B55F
ScpHashB64 = CiF0Pz6TnyOiESfatKox7Ns5UqLiWKhcuJqeVYOytV8=
정상 출력
13. 갑자기 UnstaisfiedLinked Error 발생
-> LD_LIBRARY_PATH 추가로 해결
-----------------------------------------------------------------------------------------------------------------------------------
write_fom.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Write form Page</title>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<br> 생성할 아이디와 비밀번호를 입력하세요.<br>
<form name="form1" action="write_DB.jsp" method="post">
<p> ID: <input type="text" name="id"><br><br>
Password: <input type="password" name="password"><br><br>
<input type="submit" name="formbutton1" value="보내기"> </p>
</form>
<p> </p>
</body>
</html>
--------------------------------------------------------------------------------------------------------------------------------------------------------
write_DB.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Write Database Page</title>
</head>
<body>
<%@ page import = "java.sql.*, java.util.*" %>
<%
String id = request.getParameter("id");
String password = request.getParameter("password");
Class.forName("com.mysql.jdbc.Driver");
Connection conn = null;
PreparedStatement pstmt = null;
StringBuffer sql = new StringBuffer();
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bless", "root", "root");
pstmt = conn.prepareStatement("insert into test4 (name, pw) values(?,?) ");
pstmt.setString(1, id);
pstmt.setString(2, password);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(pstmt != null)
try {
pstmt.close();
} catch (Exception e) {}
if(conn != null)
try {
conn.close();
} catch (Exception e) {}
}
ID, Password 가 입력되었습니다.
</body>
</html>
--------------------------------------------------------------------------------------------------------------------------------------------------------
read_DB.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Read Database Page</title>
</head>
<body>
<%@ page import = "java.sql.*, java.util.*" %>
<%@ page import="com.penta.scpdb.*" %>
MySQL 데이터 읽기
<%
Class.forName("com.mysql.jdbc.Driver");
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String iniPath = "/home/scptest/scpdb_agent.ini";
String strInputPlain = "";
String strEnc = "";
String strDec = "";
try {
ScpDbAgent agt = new ScpDbAgent();
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bless", "root", "root");
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from test4");
%>
<br><br>----------------------------------------<br>
<% while(rs.next()) { %>
<br> ID: <%= rs.getString("name") %><br>
<br> Password: <%=rs.getString("pw") %><br>
<%
strEnc = agt.ScpEncStr( iniPath, "KEY1", rs.getString("pw") );
System.out.println("[java] ScpEncStr : " + strEnc);
%>
<br> Password(enc): <%=strEnc %><br>
--------------------------------------------<br><br>
<%
}
}catch (SQLException e) { %>
<% e.printStackTrace(); %>
<%
} finally {
if(rs!=null)
try {
rs.close();
} catch (SQLException e) {}
if(stmt!=null)
try {
stmt.close();
} catch (SQLException e) {}
if(conn!=null)
try {
conn.close();
} catch (SQLException e) {}
}
%>
</body>
</html>
--------------------------------------------------------------------------------------------------------------------------------------------------------
read_DB.jsp


--------------------------------------------------------------------------------------------------------------------------------------------------------
write_DB.jsp 암호화 추가
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Write Database Page</title>
</head>
<body>
<%@ page import = "java.sql.*, java.util.*" %>
<%@ page import="com.penta.scpdb.*" %>
<%
String id = request.getParameter("id");
String password = request.getParameter("password");
Class.forName("com.mysql.jdbc.Driver");
Connection conn = null;
PreparedStatement pstmt = null;
StringBuffer sql = new StringBuffer();
try {
String iniPath = "/home/wasadm/scp/scpdb_agent.ini";
ScpDbAgent agt = new ScpDbAgent();
String strEnc = "";
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bless", "root", "root");
pstmt = conn.prepareStatement("insert into test4 (name, pw) values(?,?) ");
pstmt.setString(1, id);
strEnc = agt.ScpEncStr( iniPath, "KEY1", password );
System.out.println("[java] ScpEncStr : " + strEnc);
pstmt.setString(2, strEnc);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(pstmt != null)
try {
pstmt.close();
} catch (Exception e) {}
if(conn != null)
try {
conn.close();
} catch (Exception e) {}
}
%>
ID, Password 가 입력되었습니다.
</body>
</html>

Id/pw 에 penta 기입

----------------------------------------------------------------------------------------------------------------------------------------------
현재 사용하는 jar 파일은 scpdb.jar, mysql~~~jdbc.jar
두개의 jar 파일을 war로 묶음 (test.war 파일로 묶음)

catalina.properties 의 *.jar 참조를 주석처리하고 test.war 를 참조하도록 변경 후 tomcat 재기동

재기동 후 에러 발생

Tomcat server.xml 파일에 war 이름 추가
test.war 파일은 /usr/local/tomcat8/webapps 에 복사
이후 재기동

shared.loader 에 내용 추가한 후 shutdown 시 못보던 메시지 출력

server.xml 에 내용추가후 기본 시작이 안됨.

server.xml 을 다음과 같이 수정

동일하게 안됨.

일단 server.xml 삭제 후 재기동 후에는 정상적으로 기동됨.

catalina.properties 의 내용 수정 후 재기동

Tomcat 은 정상적으로 구동되나 samplecode 는 안됨

test.war 파일이 압축 풀어져서 /usr/local/tomcat8/webapps/test 에 되어있는 것 확인


Jsp 소스를 ~~~~/test 경로로 이동 후 재기동

http://152.67.199.138:8080/test/ScpDbSampleCode_Total.jsp
경로로 호출하였으나 에러 발생

test.war 는 그대로 둔 상태에서 catalina.properties 의 shared.loader 부분을 주석처리한 후 재기동


동일에러 발생

catalina.properties 에 shared.loader 경로에 test.war 파일 해제되는 경로 추가한 후 재기동 후 확인

http://152.67.199.138:8080/test/ScpDbSampleCode_Total.jsp 정상적으로 출력됨.

http://152.67.199.138:8080/ScpDbSampleCode_Total.jsp 정상적으로 출력됨.

db 호출하여 암호화하는 부분 테스트


DB 데이터 복호화 테스트

--------------------------------------------------------------------------------------------------------------------------------------------------------------------
아마도 결론
- scpdb.jar 파일을 WAR로 묶어서 올릴때는 shared.loader 부분에 war 파일이 압축풀리는 경로
(ex. /usr/local/tomcat8/webapps/test/*.jar) 경로를 넣어주면 꼭 해당 war 디렉토리에 jsp 파일이 없더라도 정상적으로 jar 호출을 한다.
-----------------------------------------------------------------------------------------------------------------------
추가 테스트
/usr/local/tomcat8/webapps/url 이라는 디렉토리를 생성한 후 모든 jsp 파일 복사
$LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/wasadm/scp 설정 제거
이후 재기동

정상적으로 호출됨

다시 재기동 후 확인 (정상적으로 호출됨)


scpdb.jar 파일을 /usr/local/tomcat8/lib 에 복사 후 재기동 후 확인

여러 번 시도하여도 잘 호출 됨

/usr/local/tomcat8/webapps/ROOT/WEB-INF 경로에 scpdb.jar 파일을 복사 후 재기동하여 확인

정상적으로 호출 됨.

/usr/local/tomcat8/webapps/url/WEB-INF 경로에 scpdb.jar 파일을 복사 후 재기동하여 확인

잘 호출됨.

Jar 파일이 위치한 경로들

Jar 파일 전체 삭제 후 재기동


Jar 파일 삭제 후 에러 발생

test.war 파일이 위치하는 곳에서 test 디렉토리를 삭제한 후 WAS 재기동

해당 디렉토리 삭제 후 재기동하니 test.war 의 압축을 다시 해제하여 scpdb.jar 가 존재하는 것 확인

해당 파일만 있는 상태에서는 에러 발생하지 않고 정상적으로 호출되는 것을 확인함.

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
최종 설정 정보
LD_LIBRARY_PATH 등 .bash_profile에 아무런 설정도 하지않음.

catalina.properties 파일 의 server.loader 부분에 WAR 파일 압축 풀어지는 경로의 *.jar 를 참조하도록 설정

WAR 파일 위치 및 디렉토리 정보

scpdb.jar 파일 존재 위치

/usr/local/tomcat8/webapps/test/scpdb.jar --> test.war 파일이 WAS 기동되면서 WAR 압축이 해제된 경로
/home/opc/scp/scpdb.jar --> wasadm 계정에 설치하기 위해 파일을 업로드한 공용계정경로
/home/wasadm/scp/scpdb.jar --> 설치경로
'개발' 카테고리의 다른 글
C# 1 - 변수 (0) | 2023.11.06 |
---|---|
C# 개발환경 구성 (0) | 2023.11.06 |
Spring start project 에 외부라이브러리 추가 및 구동 (0) | 2022.10.21 |