解决:Exception java.lang.SecurityException: class "javax.servlet.FilterRegistration"

本文针对在IntelliJ IDEA中运行Spark应用时遇到的java.lang.SecurityException问题提供了解决方案。通过调整pom.xml文件排除特定版本的servlet-api依赖,有效避免了类签名不匹配的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异常说明

java.lang.SecurityException: class “javax.servlet.FilterRegistration“‘s signer information does not match signer information of other classes in the same package

这里写图片描述


解决误区

在ideal中运行本地spark出现class “javax.servlet.FilterRegistration” 不匹配,在网上查了很多: 
1. 有让删除javax.servlet开头的库的【未解决】

  1. 有让参考http://stackoverflow.com/questions/28086520/spark-application-throws-javax-servlet-filterregistration 的【不知所云,未解决】

  2. 有让【未解决】 
    这里写图片描述


正确解决方法

于是我们需要在pom.xml中,视情况把不同版本的servlet-api给“除掉”,这里我选择的是除掉hadoop-common中的旧版本servlet-api:

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <exclusions>
        <exclusion>
            <groupId>javax.servlet</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

这里写图片描述


依次检查完所有的间接依赖,一个个处理好,再重新编译程序,测试,直到程序可以正常跑起来。 
这里需要特别注意,如果程序运行前export的CLASSPATH中的某个路径里有旧的jar包,一定要清理干净再测试,否则可能你已经在pom.xml中解决了问题,但无论怎么测都不行,仍然还是jar包冲突,结果发现是CLASSPATH中的某个路径下的旧jar包没清理干净导致的,那就浪费时间了。

执行 java -Djava.security.debug=provider -jar tks-shop-test.jar 报错[traceId:] 2025-06-03T09:48:27.798+08:00 WARN 311663 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tokenAes' defined in class path resource [com/yami/shop/common/config/ShopBeanConfig.class]: Failed to instantiate [cn.hutool.crypto.symmetric.AES]: Factory method 'tokenAes' threw exception with message: SecurityException: JCE cannot authenticate the provider BC [traceId:] 2025-06-03T09:48:27.810+08:00 DEBUG 311663 --- [ main] c.y.s.c.t.TraceThreadPoolTaskExceutor : Shutting down ExecutorService 'taskExecutor' [traceId:] 2025-06-03T09:48:27.841+08:00 INFO 311663 --- [lientSelector_1] RocketmqRemoting : closeChannel: close the connection to remote address[47.115.51.7:10911] result: true [traceId:] 2025-06-03T09:48:27.845+08:00 INFO 311663 --- [lientSelector_1] RocketmqRemoting : closeChannel: close the connection to remote address[47.115.51.7:9876] result: true [traceId:] 2025-06-03T09:48:27.911+08:00 INFO 311663 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat] [traceId:] 2025-06-03T09:48:27.960+08:00 INFO 311663 --- [ main] .s.b.a.l.ConditionEvaluationReportLogger : Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. [traceId:] 2025-06-03T09:48:28.016+08:00 ERROR 311663 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tokenAes' defined in class path resource [com/yami/shop/common/config/ShopBeanConfig.class]: Failed to instantiate [cn.hutool.crypto.symmetric.AES]: Factory method 'tokenAes' threw exception with message: SecurityException: JCE cannot authenticate the provider BC at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:659) at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:493) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1332) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1162) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:941) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:608) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1304) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1293) at com.yami.shop.admin.WebApplication.main(WebApplication.java:25) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) at org.springframework.boot.loader.Launcher.launch(Launcher.java:95) at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65) Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [cn.hutool.crypto.symmetric.AES]: Factory method 'tokenAes' threw exception with message: SecurityException: JCE cannot authenticate the provider BC at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:171) at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:655) ... 27 common frames omitted Caused by: cn.hutool.crypto.CryptoException: SecurityException: JCE cannot authenticate the provider BC at cn.hutool.crypto.SecureUtil.createCipher(SecureUtil.java:1034) at cn.hutool.crypto.CipherWrapper.<init>(CipherWrapper.java:39) at cn.hutool.crypto.symmetric.SymmetricCrypto.init(SymmetricCrypto.java:150) at cn.hutool.crypto.symmetric.SymmetricCrypto.<init>(SymmetricCrypto.java:127) at cn.hutool.crypto.symmetric.SymmetricCrypto.<init>(SymmetricCrypto.java:115) at cn.hutool.crypto.symmetric.SymmetricCrypto.<init>(SymmetricCrypto.java:104) at cn.hutool.crypto.symmetric.SymmetricCrypto.<init>(SymmetricCrypto.java:83) at cn.hutool.crypto.symmetric.AES.<init>(AES.java:50) at com.yami.shop.common.config.ShopBeanConfig.tokenAes(ShopBeanConfig.java:27) at com.yami.shop.common.config.ShopBeanConfig$$SpringCGLIB$$0.CGLIB$tokenAes$3(<generated>) at com.yami.shop.common.config.ShopBeanConfig$$SpringCGLIB$$2.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:258) at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331) at com.yami.shop.common.config.ShopBeanConfig$$SpringCGLIB$$0.tokenAes(<generated>) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:139) ... 28 common frames omitted Caused by: java.lang.SecurityException: JCE cannot authenticate the provider BC at java.base/javax.crypto.Cipher.getInstance(Cipher.java:722) at cn.hutool.crypto.SecureUtil.createCipher(SecureUtil.java:1032) ... 46 common frames omitted Caused by: java.lang.IllegalStateException: zip file closed at java.base/java.util.zip.ZipFile.ensureOpen(ZipFile.java:839) at java.base/java.util.zip.ZipFile.getManifestName(ZipFile.java:1065) at java.base/java.util.zip.ZipFile$1.getManifestName(ZipFile.java:1108) at java.base/javax.crypto.JarVerifier.verifySingleJar(JarVerifier.java:464) at java.base/javax.crypto.JarVerifier.verifyJars(JarVerifier.java:320) at java.base/javax.crypto.JarVerifier.verify(JarVerifier.java:263) at java.base/javax.crypto.ProviderVerifier.verify(ProviderVerifier.java:130) at java.base/javax.crypto.JceSecurity.verifyProvider(JceSecurity.java:190) at java.base/javax.crypto.JceSecurity.getVerificationResult(JceSecurity.java:218) at java.base/javax.crypto.Cipher.getInstance(Cipher.java:718) ... 47 common frames omitted
06-04
[root@VM-24-11-opencloudos application]# java -Dorg.bouncycastle.disable.jce.check=true -jar yami-shop.jar 11:31:34,663 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.4.7 11:31:34,728 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml] 11:31:34,729 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml] 11:31:34,737 |-INFO in ch.qos.logback.classic.BasicConfigurator@169e6180 - Setting up default configuration. 11:31:35,817 |-INFO in ch.qos.logback.core.joran.spi.ConfigurationWatchList@35aea049 - URL [jar:file:/opt/application/yami-shop.jar!/BOOT-INF/classes!/logback/logback-dev.xml] is not of type file 11:31:35,923 |-INFO in ch.qos.logback.core.joran.util.ConfigurationWatchListUtil@7205765b - Adding [jar:file:/opt/application/yami-shop.jar!/BOOT-INF/lib/spring-boot-3.0.7.jar!/org/springframework/boot/logging/logback/defaults.xml] to configuration watch list. 11:31:35,923 |-INFO in ch.qos.logback.core.joran.spi.ConfigurationWatchList@35aea049 - URL [jar:file:/opt/application/yami-shop.jar!/BOOT-INF/lib/spring-boot-3.0.7.jar!/org/springframework/boot/logging/logback/defaults.xml] is not of type file 11:31:35,928 |-INFO in ch.qos.logback.core.joran.action.ConversionRuleAction - registering conversion word clr with class [org.springframework.boot.logging.logback.ColorConverter] 11:31:35,928 |-INFO in ch.qos.logback.core.joran.action.ConversionRuleAction - registering conversion word wex with class [org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter] 11:31:35,928 |-INFO in ch.qos.logback.core.joran.action.ConversionRuleAction - registering conversion word wEx with class [org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter] 11:31:35,932 |-INFO in ch.qos.logback.core.joran.util.ConfigurationWatchListUtil@7205765b - Adding [jar:file:/opt/application/yami-shop.jar!/BOOT-INF/lib/spring-boot-3.0.7.jar!/org/springframework/boot/logging/logback/console-appender.xml] to configuration watch list. 11:31:35,932 |-INFO in ch.qos.logback.core.joran.spi.ConfigurationWatchList@35aea049 - URL [jar:file:/opt/application/yami-shop.jar!/BOOT-INF/lib/spring-boot-3.0.7.jar!/org/springframework/boot/logging/logback/console-appender.xml] is not of type file 11:31:35,999 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandler - Registering a new ReconfigureOnChangeTask ReconfigureOnChangeTask(born:1748921495996) 11:31:35,999 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandler - Will scan for changes in [jar:file:/opt/application/yami-shop.jar!/BOOT-INF/classes!/logback/logback-dev.xml] 11:31:35,999 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandler - Setting ReconfigureOnChangeTask scanning period to 1 minutes 11:31:36,005 |-INFO in ch.qos.logback.classic.model.processor.LoggerModelHandler - Setting level of logger [org.apache.catalina.startup.DigesterFactory] to ERROR 11:31:36,005 |-INFO in ch.qos.logback.classic.jul.LevelChangePropagator@47987356 - Propagating ERROR level on Logger[org.apache.catalina.startup.DigesterFactory] onto the JUL framework 11:31:36,010 |-INFO in ch.qos.logback.classic.model.processor.LoggerModelHandler - Setting level of logger [org.apache.catalina.util.LifecycleBase] to ERROR 11:31:36,011 |-INFO in ch.qos.logback.classic.jul.LevelChangePropagator@47987356 - Propagating ERROR level on Logger[org.apache.catalina.util.LifecycleBase] onto the JUL framework 11:31:36,011 |-INFO in ch.qos.logback.classic.model.processor.LoggerModelHandler - Setting level of logger [org.apache.coyote.http11.Http11NioProtocol] to WARN 11:31:36,011 |-INFO in ch.qos.logback.classic.jul.LevelChangePropagator@47987356 - Propagating WARN level on Logger[org.apache.coyote.http11.Http11NioProtocol] onto the JUL framework 11:31:36,011 |-INFO in ch.qos.logback.classic.model.processor.LoggerModelHandler - Setting level of logger [org.apache.sshd.common.util.SecurityUtils] to WARN 11:31:36,011 |-INFO in ch.qos.logback.classic.jul.LevelChangePropagator@47987356 - Propagating WARN level on Logger[org.apache.sshd.common.util.SecurityUtils] onto the JUL framework 11:31:36,011 |-INFO in ch.qos.logback.classic.model.processor.LoggerModelHandler - Setting level of logger [org.apache.tomcat.util.net.NioSelectorPool] to WARN 11:31:36,011 |-INFO in ch.qos.logback.classic.jul.LevelChangePropagator@47987356 - Propagating WARN level on Logger[org.apache.tomcat.util.net.NioSelectorPool] onto the JUL framework 11:31:36,011 |-INFO in ch.qos.logback.classic.model.processor.LoggerModelHandler - Setting level of logger [org.eclipse.jetty.util.component.AbstractLifeCycle] to ERROR 11:31:36,011 |-INFO in ch.qos.logback.classic.jul.LevelChangePropagator@47987356 - Propagating ERROR level on Logger[org.eclipse.jetty.util.component.AbstractLifeCycle] onto the JUL framework 11:31:36,011 |-INFO in ch.qos.logback.classic.model.processor.LoggerModelHandler - Setting level of logger [org.hibernate.validator.internal.util.Version] to WARN 11:31:36,011 |-INFO in ch.qos.logback.classic.jul.LevelChangePropagator@47987356 - Propagating WARN level on Logger[org.hibernate.validator.internal.util.Version] onto the JUL framework 11:31:36,011 |-INFO in ch.qos.logback.classic.model.processor.LoggerModelHandler - Setting level of logger [org.springframework.boot.actuate.endpoint.jmx] to WARN 11:31:36,011 |-INFO in ch.qos.logback.classic.jul.LevelChangePropagator@47987356 - Propagating WARN level on Logger[org.springframework.boot.actuate.endpoint.jmx] onto the JUL framework 11:31:36,011 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [CONSOLE] 11:31:36,012 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender] 11:31:36,019 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property 11:31:36,043 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [DefaultFile] 11:31:36,043 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender] 11:31:36,056 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@586127428 - No compression will be used 11:31:36,058 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@586127428 - Will use the pattern ./log/%d{yyyy-MM-dd}/admin-%d{yyyy-MM-dd}-%i.log for the active file 11:31:36,089 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6283d8b8 - The date pattern is 'yyyy-MM-dd' from file name pattern './log/%d{yyyy-MM-dd}/admin-%d{yyyy-MM-dd}-%i.log'. 11:31:36,089 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6283d8b8 - Roll-over at midnight. 11:31:36,099 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6283d8b8 - Setting initial period to 2025-06-03T03:23:38.477Z 11:31:36,100 |-WARN in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6283d8b8 - SizeAndTimeBasedFNATP is deprecated. Use SizeAndTimeBasedRollingPolicy instead 11:31:36,100 |-WARN in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6283d8b8 - For more information see http://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedRollingPolicy 11:31:36,110 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[DefaultFile] - Active log file name: ./log/admin.log 11:31:36,110 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[DefaultFile] - File property is set to [./log/admin.log] 11:31:36,118 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to INFO 11:31:36,118 |-INFO in ch.qos.logback.classic.jul.LevelChangePropagator@47987356 - Propagating INFO level on Logger[ROOT] onto the JUL framework 11:31:36,119 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [CONSOLE] to Logger[ROOT] 11:31:36,119 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [DefaultFile] to Logger[ROOT] 11:31:36,119 |-INFO in ch.qos.logback.classic.model.processor.LoggerModelHandler - Setting level of logger [com.yami.shop] to DEBUG 11:31:36,119 |-INFO in ch.qos.logback.classic.jul.LevelChangePropagator@47987356 - Propagating DEBUG level on Logger[com.yami.shop] onto the JUL framework 11:31:36,119 |-INFO in ch.qos.logback.classic.model.processor.LoggerModelHandler - Setting level of logger [springfox.documentation.swagger2] to OFF 11:31:36,119 |-INFO in ch.qos.logback.classic.jul.LevelChangePropagator@47987356 - Propagating OFF level on Logger[springfox.documentation.swagger2] onto the JUL framework 11:31:36,119 |-INFO in ch.qos.logback.classic.model.processor.LoggerModelHandler - Setting level of logger [io.swagger.models.parameters] to OFF 11:31:36,119 |-INFO in ch.qos.logback.classic.jul.LevelChangePropagator@47987356 - Propagating OFF level on Logger[io.swagger.models.parameters] onto the JUL framework 11:31:36,119 |-INFO in ch.qos.logback.classic.model.processor.LoggerModelHandler - Setting level of logger [springfox.documentation.swagger.readers.operation.OperationImplicitParameterReader] to OFF 11:31:36,119 |-INFO in ch.qos.logback.classic.jul.LevelChangePropagator@47987356 - Propagating OFF level on Logger[springfox.documentation.swagger.readers.operation.OperationImplicitParameterReader] onto the JUL framework 11:31:36,119 |-INFO in ch.qos.logback.classic.model.processor.LoggerModelHandler - Setting level of logger [springfox.documentation.spring.web.readers.operation] to OFF 11:31:36,119 |-INFO in ch.qos.logback.classic.jul.LevelChangePropagator@47987356 - Propagating OFF level on Logger[springfox.documentation.spring.web.readers.operation] onto the JUL framework 11:31:36,119 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@3b6ddd1d - End of configuration. 11:31:36,120 |-INFO in org.springframework.boot.logging.logback.SpringBootJoranConfigurator@3f6b0be5 - Registering current configuration as safe fallback point .----------------. .----------------. .----------------. .----------------. .----------------. .----------------. | .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. | | | ____ ____ | || | __ | || | _____ | || | _____ | || | _ _ | || | _____ | | | ||_ \ / _|| || | / \ | || | |_ _| | || | |_ _| | || | | | | | | || | |_ _| | | | | | \/ | | || | / /\ \ | || | | | | || | | | | || | | |__| |_ | || | | | | | | | | |\ /| | | || | / ____ \ | || | | | _ | || | | | _ | || | |____ _| | || | _ | | | | | | _| |_\/_| |_ | || | _/ / \ \_ | || | _| |__/ | | || | _| |__/ | | || | _| |_ | || | | |_' | | | | ||_____||_____|| || ||____| |____|| || | |________| | || | |________| | || | |_____| | || | `.___.' | | | | | || | | || | | || | | || | | || | | | | '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' | '----------------' '----------------' '----------------' '----------------' '----------------' '----------------' [traceId:] 2025-06-03T11:31:36.454+08:00 INFO 335254 --- [ main] com.yami.shop.admin.WebApplication : Starting WebApplication using Java 17.0.8 with PID 335254 (/opt/application/yami-shop.jar started by root in /opt/application) [traceId:] 2025-06-03T11:31:36.466+08:00 DEBUG 335254 --- [ main] com.yami.shop.admin.WebApplication : Running with Spring Boot v3.0.7, Spring v6.0.9 [traceId:] 2025-06-03T11:31:36.467+08:00 INFO 335254 --- [ main] com.yami.shop.admin.WebApplication : The following 1 profile is active: "tks-test" [traceId:] 2025-06-03T11:31:40.140+08:00 INFO 335254 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode [traceId:] 2025-06-03T11:31:40.144+08:00 INFO 335254 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. [traceId:] 2025-06-03T11:31:40.193+08:00 INFO 335254 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 21 ms. Found 0 Redis repository interfaces. [traceId:] 2025-06-03T11:31:41.223+08:00 WARN 335254 --- [ main] ocalVariableTableParameterNameDiscoverer : Using deprecated '-debug' fallback for parameter name resolution. Compile the affected code with '-parameters' instead or avoid its introspection: com.yami.shop.common.aspect.RedisLockAspect [traceId:] 2025-06-03T11:31:41.225+08:00 WARN 335254 --- [ main] ocalVariableTableParameterNameDiscoverer : Using deprecated '-debug' fallback for parameter name resolution. Compile the affected code with '-parameters' instead or avoid its introspection: com.yami.shop.sys.aspect.SysLogAspect [traceId:] 2025-06-03T11:31:42.570+08:00 INFO 335254 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8085 (http) [traceId:] 2025-06-03T11:31:42.588+08:00 INFO 335254 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] [traceId:] 2025-06-03T11:31:42.589+08:00 INFO 335254 --- [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.8] [traceId:] 2025-06-03T11:31:42.734+08:00 INFO 335254 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext [traceId:] 2025-06-03T11:31:42.736+08:00 INFO 335254 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 5532 ms [traceId:] 2025-06-03T11:31:42.751+08:00 INFO 335254 --- [ main] c.y.s.s.c.a.DefaultAuthConfigAdapter : not implement other AuthConfigAdapter, use DefaultAuthConfigAdapter... all url need auth... [traceId:] 2025-06-03T11:31:43.284+08:00 INFO 335254 --- [ main] org.redisson.Version : Redisson 3.19.3 [traceId:] 2025-06-03T11:31:43.908+08:00 INFO 335254 --- [isson-netty-2-7] o.r.c.pool.MasterPubSubConnectionPool : 1 connections initialized for localhost/127.0.0.1:6379 [traceId:] 2025-06-03T11:31:43.971+08:00 INFO 335254 --- [sson-netty-2-20] o.r.c.pool.MasterConnectionPool : 24 connections initialized for localhost/127.0.0.1:6379 [traceId:] 2025-06-03T11:31:45.557+08:00 ERROR 335254 --- [ main] c.b.m.core.MybatisConfiguration : mapper[com.yami.shop.dao.BasketMapper.getShopCartItems] is ignored, because it exists, maybe from xml file [traceId:] 2025-06-03T11:31:46.202+08:00 WARN 335254 --- [ main] c.b.m.core.injector.AbstractMethod : [com.yami.shop.dao.DistributionProdMapper.selectPage] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.SelectPage] [traceId:] 2025-06-03T11:31:48.093+08:00 WARN 335254 --- [ main] c.b.m.core.injector.AbstractMethod : [com.yami.shop.dao.UserMerchantMchMapper.selectPage] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.SelectPage] [traceId:] 2025-06-03T11:31:50.519+08:00 DEBUG 335254 --- [ main] c.y.s.c.t.TraceThreadPoolTaskExceutor : Initializing ExecutorService [traceId:] 2025-06-03T11:31:50.521+08:00 DEBUG 335254 --- [ main] c.y.s.c.t.TraceThreadPoolTaskExceutor : Initializing ExecutorService 'taskExecutor' [traceId:] 2025-06-03T11:31:53.142+08:00 WARN 335254 --- [ main] c.b.m.core.metadata.TableInfoHelper : Can not find table primary key in Class: "com.yami.shop.bean.model.PayInfo". [traceId:] 2025-06-03T11:31:53.142+08:00 WARN 335254 --- [ main] c.b.m.core.injector.DefaultSqlInjector : class com.yami.shop.bean.model.PayInfo ,Not found @TableId annotation, Cannot use Mybatis-Plus 'xxById' Method. [traceId:] 2025-06-03T11:31:53.669+08:00 INFO 335254 --- [ main] c.yami.shop.common.util.sms.AliSmsUtils : 阿里短信平台初始化成功! [traceId:] 2025-06-03T11:31:53.876+08:00 INFO 335254 --- [ main] com.anji.captcha.util.ImageUtils : 自定义resource底图:[SLIDING_BLOCK=[Ljava.lang.String;@4b508371, ORIGINAL=[Ljava.lang.String;@41143873, PIC_CLICK=[Ljava.lang.String;@21f50d2c] [traceId:] 2025-06-03T11:31:53.881+08:00 INFO 335254 --- [ main] c.a.c.s.impl.CaptchaServiceFactory : supported-captchaCache-service:[redis, local] [traceId:] 2025-06-03T11:31:53.887+08:00 INFO 335254 --- [ main] c.a.c.s.impl.CaptchaServiceFactory : supported-captchaTypes-service:[clickWord, default, blockPuzzle] [traceId:] 2025-06-03T11:31:53.887+08:00 INFO 335254 --- [ main] c.a.c.s.i.BlockPuzzleCaptchaServiceImpl : --->>>初始化验证码底图<<<---blockPuzzle [traceId:] 2025-06-03T11:31:54.805+08:00 WARN 335254 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tokenAes' defined in class path resource [com/yami/shop/common/config/ShopBeanConfig.class]: Failed to instantiate [cn.hutool.crypto.symmetric.AES]: Factory method 'tokenAes' threw exception with message: SecurityException: JCE cannot authenticate the provider BC [traceId:] 2025-06-03T11:31:54.814+08:00 DEBUG 335254 --- [ main] c.y.s.c.t.TraceThreadPoolTaskExceutor : Shutting down ExecutorService 'taskExecutor' [traceId:] 2025-06-03T11:31:54.858+08:00 INFO 335254 --- [lientSelector_1] RocketmqRemoting : closeChannel: close the connection to remote address[47.115.51.7:9876] result: true [traceId:] 2025-06-03T11:31:54.861+08:00 INFO 335254 --- [lientSelector_1] RocketmqRemoting : closeChannel: close the connection to remote address[47.115.51.7:10911] result: true [traceId:] 2025-06-03T11:31:54.907+08:00 INFO 335254 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat] [traceId:] 2025-06-03T11:31:54.946+08:00 INFO 335254 --- [ main] .s.b.a.l.ConditionEvaluationReportLogger : Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. [traceId:] 2025-06-03T11:31:54.986+08:00 ERROR 335254 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tokenAes' defined in class path resource [com/yami/shop/common/config/ShopBeanConfig.class]: Failed to instantiate [cn.hutool.crypto.symmetric.AES]: Factory method 'tokenAes' threw exception with message: SecurityException: JCE cannot authenticate the provider BC at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:659) at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:493) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1332) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1162) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:941) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:608) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1304) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1293) at com.yami.shop.admin.WebApplication.main(WebApplication.java:30) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) at org.springframework.boot.loader.Launcher.launch(Launcher.java:95) at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65) Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [cn.hutool.crypto.symmetric.AES]: Factory method 'tokenAes' threw exception with message: SecurityException: JCE cannot authenticate the provider BC at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:171) at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:655) ... 27 common frames omitted Caused by: cn.hutool.crypto.CryptoException: SecurityException: JCE cannot authenticate the provider BC at cn.hutool.crypto.SecureUtil.createCipher(SecureUtil.java:1034) at cn.hutool.crypto.CipherWrapper.<init>(CipherWrapper.java:39) at cn.hutool.crypto.symmetric.SymmetricCrypto.init(SymmetricCrypto.java:150) at cn.hutool.crypto.symmetric.SymmetricCrypto.<init>(SymmetricCrypto.java:127) at cn.hutool.crypto.symmetric.SymmetricCrypto.<init>(SymmetricCrypto.java:115) at cn.hutool.crypto.symmetric.SymmetricCrypto.<init>(SymmetricCrypto.java:104) at cn.hutool.crypto.symmetric.SymmetricCrypto.<init>(SymmetricCrypto.java:83) at cn.hutool.crypto.symmetric.AES.<init>(AES.java:50) at com.yami.shop.common.config.ShopBeanConfig.tokenAes(ShopBeanConfig.java:27) at com.yami.shop.common.config.ShopBeanConfig$$SpringCGLIB$$0.CGLIB$tokenAes$2(<generated>) at com.yami.shop.common.config.ShopBeanConfig$$SpringCGLIB$$2.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:258) at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331) at com.yami.shop.common.config.ShopBeanConfig$$SpringCGLIB$$0.tokenAes(<generated>) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:139) ... 28 common frames omitted Caused by: java.lang.SecurityException: JCE cannot authenticate the provider BC at java.base/javax.crypto.Cipher.getInstance(Cipher.java:722) at cn.hutool.crypto.SecureUtil.createCipher(SecureUtil.java:1032) ... 46 common frames omitted Caused by: java.lang.IllegalStateException: zip file closed at java.base/java.util.zip.ZipFile.ensureOpen(ZipFile.java:839) at java.base/java.util.zip.ZipFile.getManifestName(ZipFile.java:1065) at java.base/java.util.zip.ZipFile$1.getManifestName(ZipFile.java:1108) at java.base/javax.crypto.JarVerifier.verifySingleJar(JarVerifier.java:464) at java.base/javax.crypto.JarVerifier.verifyJars(JarVerifier.java:320) at java.base/javax.crypto.JarVerifier.verify(JarVerifier.java:263) at java.base/javax.crypto.ProviderVerifier.verify(ProviderVerifier.java:130) at java.base/javax.crypto.JceSecurity.verifyProvider(JceSecurity.java:190) at java.base/javax.crypto.JceSecurity.getVerificationResult(JceSecurity.java:218) at java.base/javax.crypto.Cipher.getInstance(Cipher.java:718) ... 47 common frames omitted 以上方案都尝试过了还是报错
06-04
<think>首先,用户的问题是:“我想查找Java中由于SELinux限制导致的publishBinderService安全异常解决方案 请问Java SecurityException SELinux denied publishBinderService 解决方案”。这涉及到Java中的SecurityException,特别是当SELinux限制导致publishBinderService失败时。 关键点: - 用户提到“publishBinderService”,这似乎是Android开发中的内容,因为publishBinderService是Android系统中的一个方法,用于在服务管理器中注册服务。 - 异常是java.lang.SecurityException,通常是由于SELinux(Security-Enhanced Linux)策略限制导致的。 - 用户引用了几个参考内容,其中[^3]和[^4]直接涉及SELinux权限问题。 分析用户引用: - [^1]: 讨论java.lang.SecurityException的一般原因。 - [^2]: 解决文件访问权限问题。 - [^3]: 具体关于ServiceManager add_service的SELinux Permission Denied错误,并提供了解决方案链接。 - [^4]: 总结了解决SELinux和权限管理问题的步骤。 - [^5]: 关于AIDL远程调用中的接口不正确问题。 用户的问题集中在“publishBinderService”上,这很可能与Android系统服务相关。在Android中,publishBinderService可能是ServiceManager.addService的别名或相关方法。 在Android开发中,ServiceManager.addService用于注册系统服务。如果SELinux策略禁止此操作,就会抛出SecurityException解决方案应该涉及修改SELinux策略文件或添加适当的权限。 结构化我的回答: 1. **理解问题**:解释异常的原因。 2. **分析原因**:详细说明SELinux如何导致此问题。 3. **解决方案**:提供步骤来解决SELinux权限问题。 4. **示例或代码**:如果可能,给出示例。 5. **生成相关问题**:根据要求,在最后添加相关问题。 系统级指令: - 所有行内数学表达式用$...$,但这里没有数学内容,所以可能不需要。 - 独立公式用$$...$$,但同样,不适用。 - LaTeX语法正确:确保任何公式正确,但这里主要是文本。 - 使用中文回答:整个回答用中文。 - 生成相关问题:在回答末尾添加相关问题。 - 引用标识:在引用段落末尾添加[^数字],但用户提供了引用,我需要参考它们。 用户引用是参考内容,我需要基于这些提供解决方案。特别是[^3]和[^4]相关。 关键解决方案步骤(基于引用[^3]和[^4]): - [^3]提到:添加SELinux策略规则来解决权限问题。 - 例如,修改.te文件(类型执行文件),添加allow规则。 - [^4]提到:修改SELinux策略文件、权限配置文件和白名单机制。 具体到publishBinderService: - 在Android中,当调用ServiceManager.addService时,SELinux可能会拒绝,如果上下文不匹配。 - 需要添加一个SELinux策略允许特定域(如system_server)添加服务到service_manager。 回答结构: 1. **介绍问题**:解释SecurityException和SELinux denied。 2. **原因分析**:为什么SELinux会阻止publishBinderService。 3. **解决方案步骤**: - 步骤1: 识别错误日志。 - 步骤2: 修改SELinux策略文件。 - 步骤3: 编译和加载新策略。 - 步骤4: 测试。 4. **示例**:给出一个简单的SELinux策略修改示例。 5. **注意事项**:提醒安全风险。 6. **相关问题**:生成相关问题。 确保回答真实可靠:基于Android开发文档和常见实践。 最后,生成相关问题: - 例如,关于其他SELinux错误、Android权限管理等。</think>### Java中SELinux限制导致publishBinderService安全异常的解决方案 在Java开发中,尤其是Android系统开发,当使用`publishBinderService`(或类似方法如`ServiceManager.addService`)注册服务时,可能会遇到`java.lang.SecurityException`异常,并伴随类似"SELinux denied"的错误消息。这通常是由于SELinux(Security-Enhanced Linux)的安全策略限制了服务注册操作。SELinux是Linux内核的强制访问控制机制,在Android中用于增强系统安全,防止未授权访问。当应用或系统服务试图执行受限制的操作(如添加Binder服务)时,如果安全上下文不匹配或权限不足,SELinux会抛出异常[^3][^4]。 #### 问题原因分析 - **根本原因**:`publishBinderService`方法在内部调用`ServiceManager.addService`,用于在Android服务管理器中注册Binder接口。如果SELinux策略文件(如`.te`文件)未配置允许当前安全上下文(scontext)对目标上下文(tcontext)执行`add`操作,就会触发`SecurityException`。常见错误日志示例: ``` E SELinux: avc: denied { add } for service=your_service scontext=u:r:system_server:s0 tcontext=u:object_r:default_android_service:s0 tclass=service_manager E ServiceManager: add_service('your_service', ...) uid=1000 - PERMISSION DENIED ``` 这表明`scontext`(源上下文,如`system_server`)未被授权向`tcontext`(目标上下文,如`default_android_service`)添加服务[^3][^4]。 - **触发场景**:常见于自定义系统服务、AIDL跨进程调用或系统级应用开发中,当服务未在SELinux策略中显式允许时发生。例如,在Android Framework层添加新服务时,默认策略可能禁止非标准操作[^5]。 - **风险提示**:SELinux策略错误可能导致系统不稳定或安全漏洞,修改前务必备份文件并测试。 #### 解决方案步骤 解决此问题的核心是修改SELinux策略文件,添加允许规则。以下是基于Android系统开发的标准步骤(以AOSP(Android Open Source Project)环境为例)。假设您有系统源码访问权限,并能编译SELinux策略。 1. **步骤1: 获取错误日志并分析上下文** - 通过`adb logcat`或系统日志捕获完整错误,查找`avc: denied`行,确认`scontext`和`tcontext`值。例如: ``` avc: denied { add } for service=your_service scontext=u:r:system_server:s0 tcontext=u:object_r:default_android_service:s0 tclass=service_manager ``` 这里: - `scontext=u:r:system_server:s0`:源上下文,通常是调用服务的进程(如系统服务)。 - `tcontext=u:object_r:default_android_service:s0`:目标上下文,服务管理器对象。 - `tclass=service_manager`:操作类别[^3][^4]。 2. **步骤2: 修改SELinux策略文件** - 定位策略文件:在AOSP源码中,SELinux策略文件通常位于`/system/sepolicy/`目录下。关键文件包括: - `service_contexts`:定义服务上下文映射。 - `*.te`:类型执行文件,定义权限规则(如`system_server.te`)。 - 添加允许规则: - 在对应的`.te`文件中(例如`system_server.te`),添加一条`allow`规则,语法为: ```sepolicy allow source_context target_context:target_class { permissions }; ``` 基于错误日志示例,添加: ```sepolicy allow system_server default_android_service:service_manager { add }; ``` 这允许`system_server`域向`default_android_service`类型的服务管理器添加服务[^3][^4]。 - 如果服务是自定义的,还需在`service_contexts`文件中注册服务上下文: ``` your_service u:object_r:default_android_service:s0 ``` 3. **步骤3: 编译和加载新策略** - 编译策略:在AOSP根目录运行: ```bash make sepolicy ``` 或使用`mmma system/sepolicy`编译特定模块。 - 加载策略:将生成的`sepolicy`文件刷入设备: - 对于模拟器:使用`adb push`将文件推送到`/system/etc/selinux/`。 - 对于真机:需重新编译系统镜像并刷机。 - 验证:重启设备后,检查日志是否还有`avc: denied`错误。 4. **步骤4: 测试和调试** - 运行单元测试或调用`publishBinderService`的代码,确认异常是否消失。 - 如果问题未解,使用`audit2allow`工具自动生成规则: ```bash adb logcat | grep "avc: denied" | audit2allow -m mypolicy ``` 这将输出建议的`allow`规则,可直接集成到策略文件中[^4]。 #### 示例代码和注意事项 - **示例SELinux规则**:以下是一个完整的策略修改示例,假设服务名为`my_binder_service`: ```sepolicy # 在 system/sepolicy/public/system_server.te 中添加 allow system_server default_android_service:service_manager { add }; # 在 system/sepolicy/public/service_contexts 中添加 my_binder_service u:object_r:default_android_service:s0 ``` - **注意事项**: - **安全风险**:过度放宽SELinux策略可能降低系统安全性。始终遵循最小权限原则,仅添加必要规则[^4]。 - **权限配置**:如果问题涉及文件或网络权限(如引用[^2]),还需检查AndroidManifest.xml中的`<uses-permission>`。 - **兼容性**:在Android 10+中,SELinux策略更严格;确保测试不同API级别。 - **备选方案**:对于非系统应用,考虑使用`Context.bindService()`代替直接`publishBinderService`,或申请`SELINUX_PERMISSIVE`模式调试(但不推荐生产环境)[^5]。 通过以上步骤,您可以有效解决由SELinux限制导致的`publishBinderService`安全异常。如果您没有系统源码权限(如开发普通APP),问题可能源于设备制造商策略,建议联系OEM或使用标准API替代[^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值