当前位置: 首页 > 知识库问答 >
问题:

在AWS ElasticBeanstalk和Nginx上使用OAuth2的Spring Boot应用程序上如何强制使用SSL?

叶俊郎
2023-03-14

我试图使用参考文档强制SSL

https://docs.spring.io/spring-boot/docs/current/reference/html/howto-security.html#howto-启用https

不过我已经有了

@Configuration
class WebSecurityConfiguration  {

当我添加扩展WebSecurityConfigrerAdapter,甚至没有受保护的空配置(HttpSecurity超文本传输协议)时,然后对非OAuth2页面/home/的请求会无缘无故地重定向到/login。它与属性设置一起工作。只需通过扩展类扩展WebSecurityConfigrerAdapter就会破坏应用程序。OAuth2还保护了其他不相关的路由。我以前在设置OAuth2时见过这种非确定性的随机行为。

这是WebSecurityConfiguration类的概要。

@Configuration
class WebSecurityConfiguration {

    @Autowired
    UserMapper userMapper;

    @Bean
    PasswordEncoder passwordEncoder() {

    @Bean
    protected UserDetailsService userDetailsService() {

就这样。

在这个回答中,我尝试添加一个Nginx配置,以重定向到SSLhttps://stackoverflow.com/a/53310987/148844,但没用。它确实重定向到SSL,但所有路径都有404个错误

HTTP Status 404-/home
键入状态报告
消息/home
说明请求的资源不可用 <apachetomcat .0.47

因此,它强制使用SSL并访问Tomcat,但Spring Boot应用程序完全一团糟。就好像ZIP中的WAR文件从未部署过一样。

参考:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-tomcat-proxy.html#java-tomcat代理nginx

共有2个答案

终安和
2023-03-14

我认为您不必关心在tomcat应用程序端启用SSL,它不是必需的,只需启用SSL直到nginx

您只需在nginx上终止SSL,并将代理/反向代理传递给tomcat

这里有一些参考资料来证明我的上述观点。https://docs.nginx.com/nginx/admin-guide/security-controls/terminating-ssl-http/https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-load-balancing-with-ssl-termination

在您的情况下,您需要遵循以下步骤。

1) 创建00_应用程序。conf文件,并将其放在。ebextensions/nginx/conf.d/elasticbeanstalk/。

2)00_application.conf文件应该有以下内容。

server {
    listen          443 ssl;
    server_name     www.example.com;
    ssl_certificate www.example.com.crt;
    #...
    location /{
//your tomcat port, I'm here assuming the your beanstalkserver tomcat is listing to 8080.
proxy_pass http://127.0.0.1:8080;
}
}

3) 停止列出默认端口80并重定向到443,这意味着如果您有http://foo.bar/作为您的域,您可以重定向它https://foo.bar/,打开nginx。conf文件位于。ebextensions/nginx/nginx。conf。另外,确保写下以下行,include conf.d/elasticbeanstalk/*。形态

server {
listen 80;

server_name foo.bar;
return 301 https://foo.bar$request_uri;
}

我认为O-Auth、none of Auth、Spring boot v/s非Spring boot应用在这里不那么重要。

请确保遵循AWS文档中的注释,以及扩展默认nginx配置一节。具体阅读关于我希望能回答你问题的便条。我并没有在beanstalk上测试上述所有内容,但其余的都是在EC2上测试的,即使用nginx代理的tomcat。试试这个,并在评论部分发布你可能遇到的具体问题。

罗兴运
2023-03-14

我放弃了使用Spring Boot,因为它太不稳定了,我求助于Nginx配置选项。这很有效,尽管对于制作拉链来说似乎过于冗长。弹性豆茎中还有一个错误的额外问题!

AWS Elastic Beanstalk Tomcat可与之配合使用。战争,但不是。拉链

当部署ZIP时,它不会部署WAR!所以我必须创建一个解决方案来在ZIP中创建两个WAR文件。(只有一个,即使称为ROOT. war,也不起作用。)

我找不到用Maven创建空文件的方法,所以我创建了一个空的empty。war文件,并将其捆绑在ZIP中,以诱使Elastic Beanstalk正确运行和部署应用程序。真是一团糟!天哪!

        <plugin> <!-- To add .ebextensions/ Nginx config for ElasticBeanstalk -->
          <artifactId>maven-assembly-plugin</artifactId>
          <configuration>
            <descriptors>
              <descriptor>assembly.xml</descriptor>
            </descriptors>
          </configuration>
          <executions>
            <execution>
              <id>make-assembly</id>
              <phase>package</phase>
              <goals>
                <goal>single</goal>
              </goals>
            </execution>
          </executions>
        </plugin>           
<assembly 
  xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
  <id>bin</id>
  <baseDirectory>/</baseDirectory>
  <formats>
    <format>zip</format>
  </formats>
  <files>
    <file>
      <source>empty.war</source>
      <outputDirectory/>
    </file>
    <file>
      <source>${project.build.directory}/AppName-0.0.3-SNAPSHOT.war</source>
      <outputDirectory/>
      <destName>ROOT.war</destName>
    </file>
  </files>

  <fileSets>
    <fileSet>
      <directory>${project.basedir}</directory>
      <outputDirectory>/.ebextensions/nginx/conf.d/elasticbeanstalk/</outputDirectory>
      <includes>
        <include>force-https.conf</include>
      </includes>
    </fileSet>
  </fileSets>
</assembly>

配置文件就在项目根目录中。我不知道还能把它放在哪里——它不是源代码。

if ($http_x_forwarded_proto = 'http') {
    return 301 https://$host$request_uri;
}

http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html

 类似资料:
  • 我有Kafka Streams java应用程序启动并运行。我试图使用KSQL创建简单的查询,并使用Kafka流来实现复杂的解决方案。我希望将KSQL和Kafka流作为Java应用程序运行。 我打算通过https://github.com/confluentinc/ksql/blob/master/ksqldb-examples/src/main/java/io/confluent/ksql/em

  • 连接到上游时,我收到一个nginx错误。 我已经阅读并应用了导致504网关超时问题的Nginx反向代理。然而,我的情况略有不同,因为我有三个endpoint要代理。 我的nginx.conf: 我的"/"和带有端口: 8080代理的应用程序是预期的,但是我的带有端口: 8000的应用程序没有代理,并且得到了上面提到的超时异常。如果我尝试用端口请求应用程序: 8000,应用程序会按预期工作。 什么可

  • 我在Heroku上成功运行了一个节点应用程序。我已经购买了加急SSL证书,一切正常。我去https...并获得一个完整的“绿色条”,证明该站点是通过https提供服务的 但是,非 SSL 标准 http 仍然可用。如何强制应用通过 https 提供服务?谢谢

  • 我正在尝试使用 Django 通过 Apache 2.4.18 提供网页mod_wsgi并在访问本地主机时收到错误 403 禁止。 系统:LXLE Unix Apache 2.4.18 Django版本1.11.17 libapache2-mod-wsgi-py3i 遵循的程序:https://www.digitalocean.com/community/tutorials/how-to-serv

  • 我似乎不能强迫https在弹性Beanstalk的自由使用层上。 关于如何在amazon elastic beanstalk上强制https而又不通过健康检查,我尝试了以下建议 使用此Apache重写规则 当我这样做时,http请求不会像我想的那样被重定向到https。相反,http页会正常加载。我也尝试使用X-Forwarded-Port报头,得到了同样的结果。 我也试过下面的重写规则 而此规则

  • 这个问题已经出现过好几次了,尽管似乎没有任何有效的解释。(或者也许我没有在这个叫做互联网的混乱中找到它)。。。 我正在开发一个android应用程序,它会打开一个包含上传按钮的HTML页面。它在WebView中不起作用。 我试过:http://m0s-programming.blogspot.in/2011/02/file-upload-in-through-webview-on.html 但是e