CAS Maven Overlay和Spring Boot不能一起工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CAS Maven Overlay和Spring Boot不能一起工作相关的知识,希望对你有一定的参考价值。

我从spring.io创建一个spring boot应用程序,然后将AS依赖项添加到项目的pom文件中,如下所示。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apereo.cas</groupId>
        <artifactId>cas-server-webapp</artifactId>
        <version>$cas.version</version>
        <type>war</type>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>$h2.version</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <overlays>
                    <overlay>
                        <groupId>org.apereo.cas</groupId>
                        <artifactId>cas-server-webapp</artifactId>
                    </overlay>
                </overlays>
            </configuration>
        </plugin>
    </plugins>
</build>

之后启动Spring启动应用程序,但CAS不会在spring启动应用程序中启动。这种CAS用法的主要问题是什么?这种方式使用CAS的方法是错误的吗?

_____________________________________________________________

最后我解决了我的问题。我改变pom文件如下

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

<properties>
    <javaparser-core.version>3.12.0</javaparser-core.version>
    <start.class>org.apereo.cas.web.CasWebApplication</start.class>
    <start.class2>x.y.sso.SingleSignOnApplication</start.class2>
    <h2.version>1.4.197</h2.version>
    <cas.version>6.0.1</cas.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apereo.cas</groupId>
        <artifactId>cas-server-webapp-tomcat</artifactId>
        <version>$cas.version</version>
        <type>war</type>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>com.github.javaparser</groupId>
        <artifactId>javaparser-core</artifactId>
        <version>$javaparser-core.version</version>
    </dependency>
    <dependency>
        <groupId>org.apereo.cas</groupId>
        <artifactId>cas-server-core-configuration</artifactId>
        <version>$cas.version</version>
    </dependency>
    <dependency>
        <groupId>org.apereo.cas</groupId>
        <artifactId>cas-server-core-configuration</artifactId>
        <version>$cas.version</version>
    </dependency>
</dependencies>

<build>
    <finalName>cas</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <mainClass>$start.class2</mainClass>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
                <!--<recompressZippedFiles>false</recompressZippedFiles>-->
                <archive>
                    <compress>false</compress>
                    <manifestFile>
                        $project.build.directory/war/work/org.apereo.cas/cas-server-webapp-tomcat/META-INF/MANIFEST.MF
                    </manifestFile>
                </archive>
                <overlays>
                    <overlay>
                        <groupId>org.apereo.cas</groupId>
                        <artifactId>cas-server-webapp-tomcat</artifactId>
                    </overlay>
                </overlays>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
        </plugin>
    </plugins>
</build>

然后我创建一个Application类

@EnableDiscoveryClient
@SpringBootApplication(exclude = 
    HibernateJpaAutoConfiguration.class,
    JerseyAutoConfiguration.class,
    JmxAutoConfiguration.class,
    DataSourceAutoConfiguration.class,
    DataSourceHealthIndicatorAutoConfiguration.class,
    RedisAutoConfiguration.class,
    MongoAutoConfiguration.class,
    MongoDataAutoConfiguration.class,
    CassandraAutoConfiguration.class,
    DataSourceTransactionManagerAutoConfiguration.class,
    RedisRepositoriesAutoConfiguration.class)
@EnableConfigurationProperties(CasConfigurationProperties.class)
@EnableAsync
@EnableTransactionManagement(proxyTargetClass = true)
@EnableScheduling  
public class SingleSignOnApplication 
    public static void main(String[] args) 
       SpringApplication.run(SingleSignOnApplication.class, args);


通过这种配置,通过spring boot正常构建maven目标和执行项目。

答案

CAS已经是一个Spring Boot Web应用程序。因此,请查看cas-server-webapp-init-6.0.1.jar并查看Cas Web Application.java。

@EnableDiscoveryClient
@SpringBootApplication(exclude=HibernateJpaAutoConfiguration.class, JerseyAutoConfiguration.class, GroovyTemplateAutoConfiguration.class, JmxAutoConfiguration.class, DataSourceAutoConfiguration.class, DataSourceHealthIndicatorAutoConfiguration.class, RedisAutoConfiguration.class, MongoAutoConfiguration.class, MongoDataAutoConfiguration.class, CassandraAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, RedisRepositoriesAutoConfiguration.class)
@EnableConfigurationProperties(CasConfigurationProperties.class)
@EnableAsync
@EnableTransactionManagement(proxyTargetClass=true)
@EnableScheduling
public class CasWebApplication

  public static void main(String[] args)
  
    Map<String, Object> properties = CasEmbeddedContainerUtils.getRuntimeProperties(Boolean.TRUE);
    Banner banner = CasEmbeddedContainerUtils.getCasBannerInstance();
    new SpringApplicationBuilder(new Class[]  CasWebApplication.class )
      .banner(banner)
      .web(WebApplicationType.SERVLET)
      .properties(properties)
      .logStartupInfo(true)
      .contextClass(CasWebApplicationContext.class)
      .run(args);
  

删除spring-boot-starter依赖项,CAS应该作为Web应用程序启动。

为了进一步调查,我建议你从https://search.maven.org/artifact/org.apereo.cas/cas-server-webapp/6.0.1/war下载战争并用jd-gui之类的工具进行检查。

以上是关于CAS Maven Overlay和Spring Boot不能一起工作的主要内容,如果未能解决你的问题,请参考以下文章

java.lang.ClassCastException 在 Wildfly 10 上部署 CAS 5.3.3 Maven Overlay WAR

单点登录 CAS 1-下载及安装

CentOS安装CAS 5.3.4服务端

CAS5.3服务环境搭建

CAS 5.3.1系列之使用cas overlay搭建服务端

Overlay 方式构建 CAS