Spring Boot应用程序可以在调试器中使用,但不能作为jar

时间:2019-11-12 16:28:07

标签: java spring spring-boot

我已经研究了好几个小时,无法弄清楚。我在Windows上有一个Spring Boot应用程序。标准设置:公共登录页面,然后是一堆经过身份验证的路由。这些路由会到达客户端的React Router-我不知道这是否相关。

该应用程序的工作方式类似于Eclipse调试器中的冠军。我正试图将其部署为罐子,所以我打电话给

mvnw clean package
java -jar target/[app].jar

它运行,我得到登录屏幕。它会正确地拒绝错误的登录,并且一切正常。但是,当我输入正确的凭据并进行身份验证时,它会挂在主屏幕上,并显示一堆“ 404”错误,好像找不到任何脚本,css等。公共登录屏幕没有问题他们,因为它显示图像并运行脚本确定。命令窗口没有显示其他输出。

我相当确定它与身份验证故障有关,但是为什么从Eclipse运行但不能作为打包的jar运行时却可以工作呢?

很难知道要包含哪些片段,但我将从这些片段开始。从我的POM:

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.lmco.energy.web2.WebApplication</mainClass>
                    <addResources>true</addResources>
                </configuration>

                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
               </executions>
            </plugin>
        </plugins>
    </build>

我的WebSecurityConfig类:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/login").permitAll()
                .antMatchers("/admin/**").hasRole("admin")
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .successHandler(new RoleBasedAuthenticationSuccessHandler())
                .permitAll()
                .and()
            .csrf()
                .ignoringAntMatchers("/api/**", "/login")
                .and()
            .logout()
                .logoutSuccessUrl("/login")
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                .deleteCookies("JSESSIONID")
                .invalidateHttpSession(true);
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/resources/**", "/css/**", "/js/**", "/images/**", "/fonts/**");
    }

    @Bean
    public UserDetailsService userDetailsService() {
      return new UserDetailsServiceImp();
    };

    @Bean
    public DaoAuthenticationProvider authProvider() {
        DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();
        authProvider.setUserDetailsService(userDetailsService());
        authProvider.setPasswordEncoder(new CustomPasswordEncoder());
        return authProvider;
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(authProvider());
    }
}

1 个答案:

答案 0 :(得分:0)

终于明白了!我希望它能对以后为此奋斗的人有所帮助...

@ptomli很近。尽管返回404错误的资源的URL 与我从Eclipse调试器运行Web应用程序时使用的URL完全相同,但是存在大小写差异。特别是其中一个名为“ / ThirdParty”的子文件夹,但在URL中被称为“ thirdParty”,这导致大量错误,并导致我认为找不到 all 所有资源。虽然url通常不区分大小写,但我想这里的寓意是,将它们打包到jar中后,路径会区分大小写。最终,身份验证方面是红鲱鱼。