我已经研究了好几个小时,无法弄清楚。我在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());
}
}
答案 0 :(得分:0)
终于明白了!我希望它能对以后为此奋斗的人有所帮助...
@ptomli很近。尽管返回404错误的资源的URL 与我从Eclipse调试器运行Web应用程序时使用的URL完全相同,但是存在大小写差异。特别是其中一个名为“ / ThirdParty”的子文件夹,但在URL中被称为“ thirdParty”,这导致大量错误,并导致我认为找不到 all 所有资源。虽然url通常不区分大小写,但我想这里的寓意是,将它们打包到jar中后,路径会区分大小写。最终,身份验证方面是红鲱鱼。