从apache访问静态spring启动文件

lskq00tm  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(268)

我有一个apache web服务器,配置如下:

<VirtualHost *:80>
  # Admin email, Server Name (domain name), and any aliases
  ServerAdmin webmaster@elcor.com
  ServerName  elcor.com
  ServerAlias www.elcor.com
  ProxyPass / http://localhost:8080/home.html
  ProxyPassReverse / http://localhost:8080/html

  # Index file and Document Root (where the public files are located)
  DirectoryIndex index.html index.php
  DocumentRoot /var/www/html/elcor.com/public_html
  # Log file locations
  LogLevel warn
  ErrorLog  /var/www/html/elcor.com/log/error.log
  CustomLog /var/www/html/elcor.com/log/access.log combined
</VirtualHost>

当我直接用 http://localhost:8080/home.html ,一切都很好,但是当我通过apacheweb服务器进行操作时( http://elcor.com )所有的公众匹配者( *.css , *.js.. )我在springboot中定义了不再公开的安全文件,它会重定向这些文件的fo登录。

@Override
protected void configure(HttpSecurity http) throws Exception {

    http
        .authorizeRequests()
            .antMatchers(publicMatchers()).permitAll()
            .anyRequest().authenticated()
            .and()
        .formLogin()
            .loginPage("/login.html")
            .defaultSuccessUrl("/joan.html")
            .failureUrl("/login.html?error").permitAll()
            .and()
        .logout().permitAll();
}
xzlaal3s

xzlaal3s1#

由于spring应用程序也在为静态资源js和css提供服务,因此您需要以允许您将通信路由到应用程序的方式配置apache,以便找到这些资源。
请在apache配置中尝试以下更改:

ProxyPass / http://localhost:8080
ProxyPassReverse / http://localhost:8080

如您所见,这个想法是将web服务器根路径中接收到的所有流量路由到spring应用程序。
我认为这个改变对解决你的问题有帮助。
另外,您可以指示Spring Security 忽略这类资源。您可以通过重写以下方法在spring安全配置类中实现此功能:

@Override
public void configure(WebSecurity web) throws Exception {
  web
    .ignoring()
       // You can also ignore other resources like images, fonts, etcetera
      .antMatchers("/**/*.js")
      .antMatchers("/**/*.css");
}

相关问题