Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine Spring引导安全性在Google应用程序引擎上不起作用_Google App Engine_Spring Boot_Spring Security - Fatal编程技术网

Google app engine Spring引导安全性在Google应用程序引擎上不起作用

Google app engine Spring引导安全性在Google应用程序引擎上不起作用,google-app-engine,spring-boot,spring-security,Google App Engine,Spring Boot,Spring Security,在寻找解决方案失败后,我最终放弃了。我正在尝试部署一个使用Spring引导和Spring安全性的测试应用程序。当我在本地运行我的应用程序时,一切都很好——没有错误或异常,并且应用程序能够很好地处理spring安全性 我使用Gradle构建项目,然后将其部署到googleappengine。在部署之前,我试图使用Google App EngineGradle插件在本地运行我的项目,更具体地说,是使用appengineRunGradle任务 执行此特定任务后,我的应用程序正常启动,但当我尝试在本地主

在寻找解决方案失败后,我最终放弃了。我正在尝试部署一个使用Spring引导和Spring安全性的测试应用程序。当我在本地运行我的应用程序时,一切都很好——没有错误或异常,并且应用程序能够很好地处理spring安全性

我使用
Gradle
构建项目,然后将其部署到googleappengine。在部署之前,我试图使用Google App Engine
Gradle
插件在本地运行我的项目,更具体地说,是使用
appengineRun
Gradle任务

执行此特定任务后,我的应用程序正常启动,但当我尝试在本地主机上访问“/”时,会出现403错误。我的项目中没有web.xml配置文件,尽管我不认为这是问题的关键。我确实有一个appengine-web.xml文件,这是谷歌应用程序引擎所需要的

我将如何使我的应用程序与此特定的应用程序引擎任务一起工作?我的主要目标是在GAE上部署Spring引导应用程序,并使Spring安全性正常工作

我包括我的java类、build.gradle文件和WEB-INF内容:

build.gradle:

buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.google.cloud.tools:appengine-gradle-plugin:+'
        classpath("org.springframework.boot:spring-boot-gradle-plugin:2.0.0.RELEASE")

    }
}
repositories {

    maven {
        url 'https://oss.sonatype.org/content/repositories/snapshots'
        mavenCentral()
        jcenter()
    }

    apply plugin: 'java'
    apply plugin: 'war'
    apply plugin: 'com.google.cloud.tools.appengine'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'
    bootJar {
        baseName = 'gs-spring-boot'
        version = '0.1.0'
    }

    dependencies {
        compile group: 'com.google.appengine', name: 'appengine-api-1.0-sdk', version: '1.9.63'
        providedCompile 'javax.servlet:javax.servlet-api:3.1.0'
        compile 'jstl:jstl:1.2'
        compile("org.springframework.boot:spring-boot-starter-web")
        compile group: 'org.springframework.boot', name: 'spring-boot-starter-actuator', version: '2.0.0.RELEASE'
        compile group: 'org.springframework.boot', name: 'spring-boot-starter-security', version: '2.0.0.RELEASE'
        compile 'com.google.cloud:google-cloud:+'
        testCompile 'junit:junit:4.12'
        testCompile 'com.google.truth:truth:0.33'
        testCompile 'org.mockito:mockito-all:1.10.19'
        testCompile 'com.google.appengine:appengine-testing:+'
        testCompile 'com.google.appengine:appengine-api-stubs:+'
        testCompile 'com.google.appengine:appengine-tools-sdk:+'
    }

    appengineDeploy.dependsOn test
    appengineStage.dependsOn test

    appengine {
        run {
            port = 8090
        }

        deploy {   // deploy configuration
        }
    }

    test {

        useJUnit()
        testLogging.showStandardStreams = true
        beforeTest { descriptor ->
            logger.lifecycle("test: " + descriptor + "  Running")
        }

        onOutput { descriptor, event ->
            logger.lifecycle("test: " + descriptor + ": " + event.message)
        }
        afterTest { descriptor, result ->
            logger.lifecycle("test: " + descriptor + ": " + result)
        }
    }

    group = "com.example.appenginej8"
    version = "1.0.0-SNAPSHOT"

    sourceCompatibility = 1.8
    targetCompatibility = 1.8
}
appengine-web.xml:

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <version>1</version>
    <threadsafe>true</threadsafe>
    <runtime>java8</runtime>
</appengine-web-app>
MyController.java:

@RestController
public class MyController {


    @RequestMapping("/")
    public String hello() {
        return "test";
    }
}
SecurityConfig.java:

@EnableWebSecurity
public class SecurityConfig {

        @Bean
        public UserDetailsService userDetailsService() {
            InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
            manager.createUser(User.withDefaultPasswordEncoder().username("user").password("password").roles("ADMIN").roles("ACTUATOR").build());
            return manager;
        }
}

您需要
SpringBootServletInitializer
才能神奇地使springboot作为传统的Servlet服务发挥作用

import org.springframework.boot.builder.SpringApplicationBuilder;
导入org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
公共类ServletInitializer扩展了SpringBootServletInitializer{
@凌驾
受保护的SpringApplicationBuilder配置(SpringApplicationBuilder应用程序){
返回应用程序.sources(application.class);
}
}

这将使它基本上起作用。我注意到,添加此类后,您仍然会遇到一个不同但很小的问题,但修复起来应该很简单。

您需要
SpringBootServletInitializer
神奇地使Spring Boot功能成为传统的Servlet

import org.springframework.boot.builder.SpringApplicationBuilder;
导入org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
公共类ServletInitializer扩展了SpringBootServletInitializer{
@凌驾
受保护的SpringApplicationBuilder配置(SpringApplicationBuilder应用程序){
返回应用程序.sources(application.class);
}
}

这将使它基本上起作用。我注意到,添加此类后,您仍然会遇到一个不同但很小的问题,但修复起来应该很简单。

请提供帮助:)我认为这与Spring Boot安全性无关。我删除了
SecurityConfig
类,本地开发服务器仍然返回403。请帮助:)我认为这与Spring引导安全性无关。我完成了“<代码>安全性配置> <代码>类,并且本地DEV服务器仍然返回403。@ MROFRAT1337,如果您认为Chanseok的答案对您有效,请考虑接受它。谢谢。@ MRFROT1337,如果你认为Chanseok的答案对你有效,请考虑接受它。非常感谢。
@EnableWebSecurity
public class SecurityConfig {

        @Bean
        public UserDetailsService userDetailsService() {
            InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
            manager.createUser(User.withDefaultPasswordEncoder().username("user").password("password").roles("ADMIN").roles("ACTUATOR").build());
            return manager;
        }
}