【问题标题】:Wss4jSecurityInterceptor on Spring boot春季启动时的 Wss4jSecurityInterceptor
【发布时间】:2015-10-05 00:06:18
【问题描述】:

当我尝试在我的 Spring Boot 配置中连接它时,Eclipse 抱怨它找不到 Wss4jSecurityInterceptor(它不可用于导入):

@Bean public Wss4jSecurityInterceptor wss4jSecurityInterceptor(){...} 

以下是 pom.xml 文件的相关摘录:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.abc</groupId>
    <artifactId>abc-connectivity-boot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>abc-connectivity-boot</name>
    <description>FFM Connectivity via Digested UserNameToken</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.5.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-ws</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.ws</groupId>
            <artifactId>spring-ws-test</artifactId>
            <version>2.2.1.RELEASE</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

        <!-- <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j</artifactId> 
            </dependency> -->

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

我错过了什么?

提前谢谢你。 西蒙

在 pom.xml 中添加了 spring-ws-security 依赖项(根据 M. Deinum 的建议),我现在看到以下运行时错误:

Caused by: java.lang.NoClassDefFoundError: org/apache/ws/security/WSSecurityException
    at connect.ConnectivityTestingConfig.wss4jSecurityInterceptor(ConnectivityTestingConfig.java:68)
    at connect.ConnectivityTestingConfig$$EnhancerBySpringCGLIB$$e29e9046.CGLIB$wss4jSecurityInterceptor$4(<generated>)
    at connect.ConnectivityTestingConfig$$EnhancerBySpringCGLIB$$e29e9046$$FastClassBySpringCGLIB$$bb38be14.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:309)
    at connect.ConnectivityTestingConfig$$EnhancerBySpringCGLIB$$e29e9046.wss4jSecurityInterceptor(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)

添加如下依赖:

   <dependency>
        <groupId>org.apache.ws.security</groupId>
        <artifactId>wss4j</artifactId>
        <version>1.5.8</version>
    </dependency>

似乎解决了上述错误,但这是朝着正确方向迈出的一步吗?
关注点:

  1. 通过上述添加,spring-boot-starter-security 是否应该存在于 pom.xml 中?

  2. 如何控制添加的 wss4j 的版本,应该如何控制?例如,wss4j-1.5.8.jar 似乎不兼容,而 wss4j-1.6.18 似乎可以工作。如何将 Spring Boot 的版本与其所需的依赖关系关联起来?

有人可以评论一下这种方法吗?这是生成的 pom.xml:

    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.2.5.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-ws</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.ws</groupId>
        <artifactId>spring-ws-test</artifactId>
        <version>2.2.1.RELEASE</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.ws</groupId>
        <artifactId>spring-ws-security</artifactId>
    </dependency>

    <dependency>
        <groupId>org.apache.ws.security</groupId>
        <artifactId>wss4j</artifactId>
        <version>1.6.18</version>
        <!-- <type>jar</type> -->
        <!-- <scope>compile</scope> -->
    </dependency>

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

【问题讨论】:

  • 我检查了 spring-ws-core-2.2.1.RELEASE.jar 似乎与 Spring Boot 上的上述版本相关联,发现它不包含其中的“安全”包Wss4jSecurityInterceptor.java 应该驻留,而它存在于 Spring Boot 源 (github.com/spring-projects/spring-ws/tree/2.2.1.RELEASE/…) 中。有人可以帮我解释一下吗?
  • 不,它不是在您需要添加的spring-ws-security jar 中。
  • 请不要将代码、xml、堆栈跟踪添加为 cmets,用它来改进您的原始问题。

标签: java spring maven spring-security


【解决方案1】:

我最终得到了这个工作配置:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.5.RELEASE</version>
        <relativePath />
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.7</java.version>
        <audit-lib.version>1.0.0</audit-lib.version>
        <cxf.version>3.1.0</cxf.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-ws</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.ws</groupId>
            <artifactId>spring-ws-test</artifactId>
            <!-- <version>2.2.1.RELEASE</version> -->
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.ws</groupId>
            <artifactId>spring-ws-security</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.ws.security</groupId>
            <artifactId>wss4j</artifactId>
            <version>1.6.18</version>
        </dependency>

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.fuwt.iws</groupId>
            <artifactId>audit-lib</artifactId>
            <version>${audit-lib.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>

        <!-- <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency> -->       



    </dependencies>

【讨论】:

    【解决方案2】:

    事实上,我遇到了同样的问题,这个答案对我有帮助。使用 Maven 将依赖项添加到 wss4j 时,您可以选择添加包或 zip/源引用,从而产生如下依赖项:

        <dependency>
            <groupId>org.apache.ws.security</groupId>
            <artifactId>wss4j</artifactId>
            <version>1.6.19</version>
            <type>zip</type>
            <classifier>source-release</classifier>
        </dependency>
    

    这导致了 NoClassDefFoundError。我通过删除上面答案中提到的类型和分类器元素使其工作:

        <dependency>
            <groupId>org.apache.ws.security</groupId>
            <artifactId>wss4j</artifactId>
            <version>1.6.19</version>
        </dependency>
    

    经过此更正后,我的代码运行良好。顺便说一句,我不需要在上面的答案中添加任何其他依赖项。

    【讨论】:

      猜你喜欢
      • 2017-09-11
      • 2015-04-18
      • 2017-06-24
      • 2015-08-22
      • 2015-09-18
      • 2015-03-20
      • 2018-01-24
      • 2016-08-22
      • 2016-07-22
      相关资源
      最近更新 更多