Я создал сервлет Java и запускаю его на сервере Tomcat в веб-отеле. Он должен отправлять push-сообщения на устройства iOS, поэтому я добавил JavaPNS. Это отлично работает на моем локальном сервере Tomcat, но когда я развертываю его на сервере Tomcat, предоставляемом веб-отелем, то это утверждение:
Security.addProvider(new BouncyCastleProvider());
дает исключение:
Exception in thread "Thread-193" java.lang.InternalError: cannot create instance of org.bouncycastle.jce.provider.symmetric.AES$Mappings : java.security.AccessControlException: access denied (java.security.SecurityPermission putProviderProperty.BC)
at org.bouncycastle.jce.provider.BouncyCastleProvider.loadAlgorithms(Unknown Source)
at org.bouncycastle.jce.provider.BouncyCastleProvider.setup(Unknown Source)
at org.bouncycastle.jce.provider.BouncyCastleProvider.access$000(Unknown Source)
at org.bouncycastle.jce.provider.BouncyCastleProvider$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at org.bouncycastle.jce.provider.BouncyCastleProvider.(Unknown Source)
at javapns.communication.ConnectionToAppleServer.(ConnectionToAppleServer.java:41)
....
Вероятно, у веб-отеля есть какая-то защита, включенная на сервере Tomcat, которую я не включил локально.
Кто-нибудь знает, есть ли какие-либо проблемы с этой проблемой? Если нет, что я должен попросить, чтобы поддержка в веб-отеле изменилась, чтобы сделать это возможным?
Не пытайтесь установить BouncyCastle в качестве поставщика. Создайте новый экземпляр BouncyCastle
в своем приложении и передайте этому провайдеру перегрузку getInstance()
которая принимает параметр Provider
для каждой из криптографических служб.
Изменения класса Security
влияют на все приложения в контейнере; они не являются локальными для вашего приложения. Используйте более целенаправленный подход, который не требует глобальных изменений.
Опора на установленного поставщика может быть удобной в автономном приложении, но в конечном итоге она создает множество проблем, когда вам нужен конкретный поставщик, а библиотека, написанная поверх JCA, не позволяет указать поставщика,
Нет никакой работы. Существует ряд возможностей. Объясните своему провайдеру, что вы хотите сделать, и обсудите с ними варианты. Они включают:
Обратите внимание: если у вас есть общий экземпляр Tomcat, шансы провайдера, соглашающегося на любой из вышеперечисленных, довольно тонкие.