1

Spring および Hibernate 4 アプリケーションがデプロイされ、Tomcat 6 で正常に実行されます。ただし、次のコマンドでセキュリティ マネージャーを使用して Tomcat 6 を起動すると、次のようになります。

apache-tomcat-6.0.35\bin>catalina start -security

Tomcat 6 が AccessControlException をスローします: アクセスが拒否されました (java.lang.RuntimePermission createClassLoader)

解決策の 1 つは、catalina.policy のアクセス許可を変更することです。しかし、私のアプリはサードパーティの Tomcat 6 サーバーにデプロイされており、catalina.policy を変更する権限がありません。

Spring-Hibernate 4 統合コード:

    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
    p:dataSource-ref="dataSource" p:configLocation="${hibernate.config}"
    p:packagesToScan="com.vikas.domain" p:namingStrategy-ref="namingStrategy" />

<tx:annotation-driven transaction-manager="transactionManager" />

<bean id="transactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager"
    p:sessionFactory-ref="sessionFactory" />

セキュリティ マネージャを使用して実行すると、以下のエラー スタック トレースが表示されます。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/spring/db-config.xml]: Invocation of init method failed; nested exception is java.security.AccessControlException: access denied (java.lang.RuntimePermission createClassLoader)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1482)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:912)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:855)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:770)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:486)
... 42 more
Caused by: java.security.AccessControlException: access denied (java.lang.RuntimePermission createClassLoader)
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
    at java.security.AccessController.checkPermission(AccessController.java:546)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
    at java.lang.SecurityManager.checkCreateClassLoader(SecurityManager.java:594)
    at java.lang.ClassLoader.<init>(ClassLoader.java:202)
    at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl$AggregatedClassLoader.<init>(ClassLoaderServiceImpl.java:246)
    at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl$AggregatedClassLoader.<init>(ClassLoaderServiceImpl.java:242)
    at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.<init>(ClassLoaderServiceImpl.java:95)
    at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.<init>(ClassLoaderServiceImpl.java:61)
    at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.<init>(ClassLoaderServiceImpl.java:57)
    at org.hibernate.service.internal.BootstrapServiceRegistryImpl.<init>(BootstrapServiceRegistryImpl.java:57)
    at org.hibernate.service.ServiceRegistryBuilder.<init>(ServiceRegistryBuilder.java:76)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$6.run(AbstractAutowireCapableBeanFactory.java:1531)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1529)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1479)

catalina.policy またはその他の Tomcat サーバーの変更を変更せずに例外を修正するにはどうすればよいですか?

4

1 に答える 1

0

セキュリティ マネージャを使用して Tomcat を実行する全体的な考え方は、ある程度のセキュリティを提供することであり、セキュリティをオーバーライドする唯一の方法は、セキュリティ ポリシーを編集してニーズに対応するか、セキュリティ マネージャなしで実行することです。このサード パーティの Tomcat サーバーを担当している適切なカスタマー サポート チームに、お客様に代わって必要な変更を行うよう依頼することをお勧めします。

于 2013-10-09T14:00:27.113 に答える