Fix thêm thư viện bên ngoài vào JDK tomcat

Help me, please :ok_man: :bowing_man: :pray:
Em làm đồ án, chuyện là em thêm thư viện https://www.bouncycastle.org vảo project qua file pom.xml (maven) code chạy local 100% như ý muốn nhưng khi deploy lên server thì thư viện đó không hoạt động.

Môi trường local:

  • Windows 10 64bit
  • Tomcat tích hợp sẵn trong intellij IDE
  • JDK 17
  • Spring boot + maven

Môi trường server

  • Windows server 2012
  • JDK 17
  • Tomcat 9

Cách em thêm thư viện đó vào project:
B1: thêm vào file pom.xml

<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.69</version>
</dependency>

B2: mở file java.security lên:
Đăng ký provider trong C:/program file/java/conf/security/java.security thêm dòng security.provider.N=org.bouncycastle.jce.provider.BouncyCastleProvider

B3: khai báo trong code và import Class:
Trong code thì thêm Security.addProvider(new BouncyCastleProvider()); trong hàm main Spring.

Check log trong thư mục: C:\Program Files\Apache Software Foundation\Tomcat 9.0\logs thì không có dòng nào đề cập đến lỗi khi gọi thư viện đó.
Capture

Link log: https://test12355.s3.us-west-002.backblazeb2.com/logs.zip

hỏi vậy chịu. có gì coi đâu mà biết lỗi
xin log để ngó nhẹ.

3 Likes

Log trong 8 file đó luôn hả anh ơi, em xem từng file dựa vào thời gian từng dòng thì không có log nào liên quan đến lỗi thư viện đó hết. Toàn log lúc deploy không à. Để em nén lại up link bổ sung.

1 Like

không hoạt động, và ở bên dưới bảo là log không có lỗi cho gọi, vậy thì chỉ có thể là bạn chưa gọi hoặc là log không ghi, hoặc là bạn đọc chưa kĩ … và nhìn chung, những nguyên nhân này thì trên này không ai biết gì để kiểm tra cho bạn

5 Likes

Uhm, sẽ tốt hơn nếu cậu show bọn tớ toàn bộ log, nếu như cậu không rõ log nào chứa thông tin hữu ích :smile:

5 Likes

Dạ đây anh ơi
https://test12355.s3.us-west-002.backblazeb2.com/logs.zip

Sau khi deploy tất cả các chức năng hoạt động bình thường, chỉ có mỗi chức năng dùng thư viên ngoài là không hoạt động.

Cứu em với :pray: có nên nghiên cứu học docker để giải quyết case này không?

Cậu cần gấp lắm không @leader?
Với cả, cho tớ hỏi thêm, cậu dùng spring boot, nhưng deploy lên tomcat chứ không dùng embedded tomcat như ở local?

Docker tớ không nghĩ là solution đâu cậu :smile:

2 Likes

Ở trong access log của cậu:

162.158.179.69 - - [23/Nov/2021:23:15:26 +0700] “POST /symmetric/generateKey HTTP/1.1” 500 133

Tớ đoán đây là tính năng dùng bouncy castle mà cậu đề cập.
Đây là exception tung ra ở tomcat stdout log:

2021-11-23 23:15:26.887 ERROR 4576 --- [p-nio-80-exec-5] o.s.b.w.servlet.support.ErrorPageFilter  : Forwarding to error page from request [/symmetric/generateKey] due to exception [Serpent KeyGenerator no
t available]

java.security.NoSuchAlgorithmException: Serpent KeyGenerator not available
        at java.base/javax.crypto.KeyGenerator.<init>(KeyGenerator.java:176) ~[na:na]
        at java.base/javax.crypto.KeyGenerator.getInstance(KeyGenerator.java:243) ~[na:na]
        at CORE.cipher.Symmetric.generateKey(Symmetric.java:34) ~[classes/:0.0.1-SNAPSHOT]
        at CORE.Controller.SymmetricController.generateKey(SymmetricController.java:27) ~[classes/:0.0.1-SNAPSHOT]
        at jdk.internal.reflect.GeneratedMethodAccessor63.invoke(Unknown Source) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.13.jar:5.3.13]
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.13.jar:5.3.13]
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.13.jar:5.3.13]
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.13.jar:5.3.13]
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.13.jar:5.3.13]
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.13.jar:5.3.13]
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067) ~[spring-webmvc-5.3.13.jar:5.3.13]
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.13.jar:5.3.13]
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.13.jar:5.3.13]
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.13.jar:5.3.13]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) ~[servlet-api.jar:4.0.FR]
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.13.jar:5.3.13]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[servlet-api.jar:4.0.FR]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[catalina.jar:9.0.55]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[catalina.jar:9.0.55]
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-websocket.jar:9.0.55]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[catalina.jar:9.0.55]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[catalina.jar:9.0.55]
        at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.13.jar:5.3.13]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.13.jar:5.3.13]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[catalina.jar:9.0.55]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[catalina.jar:9.0.55]
        at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.13.jar:5.3.13]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.13.jar:5.3.13]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[catalina.jar:9.0.55]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[catalina.jar:9.0.55]
        at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:126) ~[spring-boot-2.6.0.jar:2.6.0]
        at org.springframework.boot.web.servlet.support.ErrorPageFilter.access$000(ErrorPageFilter.java:64) ~[spring-boot-2.6.0.jar:2.6.0]
        at org.springframework.boot.web.servlet.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:101) ~[spring-boot-2.6.0.jar:2.6.0]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.13.jar:5.3.13]
        at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:119) ~[spring-boot-2.6.0.jar:2.6.0]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[catalina.jar:9.0.55]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[catalina.jar:9.0.55]
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.13.jar:5.3.13]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.13.jar:5.3.13]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[catalina.jar:9.0.55]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[catalina.jar:9.0.55]
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[catalina.jar:9.0.55]

Exception chỉ ra “java.security.NoSuchAlgorithmException: Serpent KeyGenerator not available”. Tớ không rõ cậu đang làm gì, nhưng cậu có miss config nào không? :smile:

3 Likes

Chuyện là em đang làm đồ án môn học trong đó có tạo symmetric key nhưng java chỉ có thuật toán AES, DES, … không có thuật toán ít người dùng như Serpent, … mà Serpent và nhiều thuật toán khác nữa lại có trong thư viện bouncy castle.

1/ Đầu tiên em vào https://start.spring.io tải temple
2/ Khai báo thư viện trong pom.xml

<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.69</version>
</dependency>

3/ Trong Entry point của project spring boot em thêm

Security.addProvider(new BouncyCastleProvider());

trong hàm main (bên trên import class cần thiết)

Em đang tự học spring boot nên áp dụng vào luôn và lúc run trên IDE intellij thì không có lỗi (tomcat nó có embedded trong spring boot). Chức năng có gọi tới thư viện bouncy castle chỉ chạy tốt khi run trên IDE intellij localhost:8080

Trước giờ em chỉ biết cài tomcat thành service của windows, từ IDE build project thành file .war rồi đặt vào C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps là chạy.

Như này là sao anh, có cách deploy khác sao?

1 Like

nếu không có yêu cầu cụ thể thì bạn cứ dùng aes hay des thôi, hai cái này cũng là symmetric cryptography mà

Ý của lib ra cứ build ra 1 cục jar/war rồi dùng lệnh java để chạy thôi, không cần phải dùng tomcat vì tomcat đã được nhúng vào cục spring luôn rồi

3 Likes

Em có yêu cầu phải dùng thuật toán serpent, em build project ra thành ABC.jar. Chạy nó bằng cmd:

java -jar ABC.jar

thì CMD ra log này :

Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.

C:\Users\Administrator\Desktop\gg>java -jar ABC.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.6.0)

2021-11-26 08:15:40.764  INFO 4736 --- [           main] com.example.demo.DemoAp
plication         : Starting DemoApplication v0.0.1-SNAPSHOT using Java 17.0.1 o
n WIN-FA0FC31GKAJ with PID 4736 (C:\Users\Administrator\Desktop\gg\a125.jar star
ted by Administrator in C:\Users\Administrator\Desktop\gg)
2021-11-26 08:15:40.779  INFO 4736 --- [           main] com.example.demo.DemoAp
plication         : No active profile set, falling back to default profiles: def
ault
2021-11-26 08:15:45.779  INFO 4736 --- [           main] o.s.b.w.embedded.tomcat
.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2021-11-26 08:15:45.810  INFO 4736 --- [           main] o.apache.catalina.core.
StandardService   : Starting service [Tomcat]
2021-11-26 08:15:45.810  INFO 4736 --- [           main] org.apache.catalina.cor
e.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.55]
2021-11-26 08:15:46.138  INFO 4736 --- [           main] o.a.c.c.C.[Tomcat].[loc
alhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-11-26 08:15:46.138  INFO 4736 --- [           main] w.s.c.ServletWebServerA
pplicationContext : Root WebApplicationContext: initialization completed in 5124
 ms
2021-11-26 08:15:48.670  INFO 4736 --- [           main] o.s.b.w.embedded.tomcat
.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2021-11-26 08:15:48.717  INFO 4736 --- [           main] com.example.demo.DemoAp
plication         : Started DemoApplication in 9.541 seconds (JVM running for 13
.118)

Các chức năng khác vẫn hoạt động bình thường, chỉ riêng chức năng gọi đến thư viên ngoài bên trên là bị lỗi 500, chắc do không tìm thấy thư viện rồi ra log bên dưới

    021-11-26 08:16:00.738  INFO 4736 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[loc
alhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-11-26 08:16:00.738  INFO 4736 --- [nio-8080-exec-1] o.s.web.servlet.Dispatc
herServlet        : Initializing Servlet 'dispatcherServlet'
2021-11-26 08:16:00.832  INFO 4736 --- [nio-8080-exec-1] o.s.web.servlet.Dispatc
herServlet        : Completed initialization in 94 ms
2021-11-26 08:16:03.082 ERROR 4736 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[disp
atcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context
 with path [] threw exception [Request processing failed; nested exception is ja
va.security.NoSuchAlgorithmException: serpent KeyGenerator not available] with r
oot cause

java.security.NoSuchAlgorithmException: serpent KeyGenerator not available
        at java.base/javax.crypto.KeyGenerator.<init>(KeyGenerator.java:176) ~[n
a:na]
        at java.base/javax.crypto.KeyGenerator.getInstance(KeyGenerator.java:243
) ~[na:na]
        at com.example.demo.hihi.gd(hihi.java:19) ~[classes!/:0.0.1-SNAPSHOT]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Nativ
e Method) ~[na:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Native
MethodAccessorImpl.java:77) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(De
legatingMethodAccessorImpl.java:43) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvok
e(InvocableHandlerMethod.java:205) ~[spring-web-5.3.13.jar!/:5.3.13]
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeF
orRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.13.jar!/:5.3.13]
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocabl
eHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-
webmvc-5.3.13.jar!/:5.3.13]
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingH
andlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[sprin
g-webmvc-5.3.13.jar!/:5.3.13]
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingH
andlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-web
mvc-5.3.13.jar!/:5.3.13]
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapt
er.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.13.jar!/:5.3
.13]
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(Dispatch
erServlet.java:1067) ~[spring-webmvc-5.3.13.jar!/:5.3.13]
        at org.springframework.web.servlet.DispatcherServlet.doService(Dispatche
rServlet.java:963) ~[spring-webmvc-5.3.13.jar!/:5.3.13]
        at org.springframework.web.servlet.FrameworkServlet.processRequest(Frame
workServlet.java:1006) ~[spring-webmvc-5.3.13.jar!/:5.3.13]
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServl
et.java:898) ~[spring-webmvc-5.3.13.jar!/:5.3.13]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) ~[tomcat
-embed-core-9.0.55.jar!/:na]
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkSer
vlet.java:883) ~[spring-webmvc-5.3.13.jar!/:5.3.13]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat
-embed-core-9.0.55.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:227) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:162) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53
) ~[tomcat-embed-websocket-9.0.55.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:189) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:162) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.springframework.web.filter.RequestContextFilter.doFilterInternal(
RequestContextFilter.java:100) ~[spring-web-5.3.13.jar!/:5.3.13]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerR
equestFilter.java:119) ~[spring-web-5.3.13.jar!/:5.3.13]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:189) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:162) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.springframework.web.filter.FormContentFilter.doFilterInternal(For
mContentFilter.java:93) ~[spring-web-5.3.13.jar!/:5.3.13]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerR
equestFilter.java:119) ~[spring-web-5.3.13.jar!/:5.3.13]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:189) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:162) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterIntern
al(CharacterEncodingFilter.java:201) ~[spring-web-5.3.13.jar!/:5.3.13]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerR
equestFilter.java:119) ~[spring-web-5.3.13.jar!/:5.3.13]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:189) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:162) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:197) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:97) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authentica
torBase.java:540) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:135) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:92) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:78) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:357) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java
:382) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLig
ht.java:65) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(Abstract
Protocol.java:895) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpo
int.java:1722) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBas
e.java:49) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoo
lExecutor.java:1191) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPo
olExecutor.java:659) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskTh
read.java:61) ~[tomcat-embed-core-9.0.55.jar!/:na]
        at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
1 Like

Hi @leader

Exception tung ra ở TH của cậu do JVM không tìm được KeyGenerator cho giải thuật Serpent (như cậu nói, giải thuật này không được support bởi JDK by default).
Cậu cần phải cho JVM biết tìm giải thuật đó ở đâu.

Tớ có thấy cậu đề cập:

3/ Trong Entry point của project spring boot em thêm

Security.addProvider(new BouncyCastlePr

Nếu cậu gán programatically như vậy, cậu cần phải chắc chắn security policy ở $JAVA_HOME/jre/lib/security/java.policy là “unlimited”.

Nếu không, cậu có thể khai báo statically ở file $JAVA_HOME/jre/lib/security/java.security, thêm dòng này

security.provider.2=org.bouncycastle.jce.provider.BouncyCastleProvider

“.2” ở đây là số thứ tự của provider, cậu có thể đổi thành “.3” nếu cậu đã có “.2” rồi.

Tớ đoán sau khi config bằng 1 trong 2 cách trên như vậy xong, chương trình của cậu có thể chạy được.
Thử và báo tớ xem có vấn đề gì khác không nha! :smile:


Về vụ deploy project, ý tớ đúng như @kisuluoibieng nói đó, cậu có thể chạy luôn file jar mà không cần cài thêm tomcat, nếu cậu dùng spring boot.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?