如何在spring引导应用程序中将用户添加到嵌入式tomcat中?

问题描述:

我想创建一个弹簧启动应用程序,一切运行正常,除非当我访问本地主机:8080时,必须插入用户名和密码。我不知道如何从我的应用程序添加一个新的tomcat用户到嵌入式tomcat。如何在spring引导应用程序中将用户添加到嵌入式tomcat中?

这是我的聚甲醛的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.mastercrafters</groupId> 
    <artifactId>mastercrafters</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>mastercrafters</name> 
    <description>Demo project for Spring Boot</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.0.BUILD-SNAPSHOT</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-data-jpa</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-devtools</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-security</artifactId> 
     </dependency> 

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

     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 

    <repositories> 
     <repository> 
      <id>spring-snapshots</id> 
      <name>Spring Snapshots</name> 
      <url>https://repo.spring.io/snapshot</url> 
      <snapshots> 
       <enabled>true</enabled> 
      </snapshots> 
     </repository> 
     <repository> 
      <id>spring-milestones</id> 
      <name>Spring Milestones</name> 
      <url>https://repo.spring.io/milestone</url> 
      <snapshots> 
       <enabled>false</enabled> 
      </snapshots> 
     </repository> 
    </repositories> 
    <pluginRepositories> 
     <pluginRepository> 
      <id>spring-snapshots</id> 
      <name>Spring Snapshots</name> 
      <url>https://repo.spring.io/snapshot</url> 
      <snapshots> 
       <enabled>true</enabled> 
      </snapshots> 
     </pluginRepository> 
     <pluginRepository> 
      <id>spring-milestones</id> 
      <name>Spring Milestones</name> 
      <url>https://repo.spring.io/milestone</url> 
      <snapshots> 
       <enabled>false</enabled> 
      </snapshots> 
     </pluginRepository> 
    </pluginRepositories> 

</project> 

这里是我的项目的结构,其中Tomcat是可见:

embedded tomcat folder

Login from localhost

如何禁用登录如果可能的话,从application.properties中获取,或者解决此问题的方法是什么?提前谢谢了 !

你春季安全作为一个依赖。

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

如果Spring安全性在类路径上,并且在您的应用程序中没有进行安全配置,Spring将配置基本身份验证。这是一个失败保险箱。您可以在控制台中找到生成的用户名和密码。

你有两个选择:

  • 如果你不希望一个登录系统,取下弹簧安全依赖
  • 如果你想安全,你需要配置Spring Security让春天知道什么使用认证机制(基本,表单,oauth等)以及如何认证用户。

您需要详细了解默认的Spring Security Filter Chain的工作原理 - 您不需要Tomcat用户(就像您想访问Tomcat Manager应用程序一样) - 您需要允许匿名身份验证或其他方式Autnetication的形式,否则它会拒绝任何对该服务的请求。

您可以参考下面的链接来通过application.properties文件来配置Embedded tomcat。你也可以使用外部的tomcat,你可以像以前一样给tomcat-users.xml。

server.tomcat.basedir= # Tomcat base directory. If not specified a temporary directory will be used. 

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-create-a-deployable-war-file