Spring mvc Spring自定义登录页仅在IDE中显示
我正在用Spring Boot开发一个REST-API。现在我还想充当OAuth2提供者,因此我想添加对“client_credentials”授权类型的支持 为了做到这一点,我必须允许用户登录并授权客户端。Spring提供了一个丑陋的默认登录表单,现在我想显示自己的自定义登录表单 问题是我无法让它在IDE之外工作 我的配置如下所示:Spring mvc Spring自定义登录页仅在IDE中显示,spring-mvc,spring-boot,jar,war,Spring Mvc,Spring Boot,Jar,War,我正在用Spring Boot开发一个REST-API。现在我还想充当OAuth2提供者,因此我想添加对“client_credentials”授权类型的支持 为了做到这一点,我必须允许用户登录并授权客户端。Spring提供了一个丑陋的默认登录表单,现在我想显示自己的自定义登录表单 问题是我无法让它在IDE之外工作 我的配置如下所示: @Configuration @EnableWebSecurity public class SpringSecurityConfig extends WebSe
@Configuration
@EnableWebSecurity
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().requireCsrfProtectionMatcher(new AntPathRequestMatcher("**/login")).and().authorizeRequests().antMatchers("/hellopage").hasAuthority(Role.USER.value())
.and().formLogin().defaultSuccessUrl("/hellopage").loginPage("/login").and().logout().permitAll();
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/*.css");
web.ignoring().antMatchers("/*.js");
}
}
@Configuration
protected class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
registry.addResourceHandler("/*.js/**").addResourceLocations("/ui/static/");
registry.addResourceHandler("/*.css/**").addResourceLocations("/ui/static/");
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("login");
registry.addViewController("/login").setViewName("login");
registry.addViewController("/testpage").setViewName("testpage");
registry.addViewController("/hellopage").setViewName("hellopage");
}
@Bean
public InternalResourceViewResolver setupViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/ui/jsp/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
return resolver;
}
我的文件夹结构如下所示:
当我在Eclipse中运行我的应用程序并访问时,一切都正常工作,并显示我的自定义登录表单。当我用maven打包应用程序并执行生成的.war文件时,visiting显示了丑陋的默认登录表单,这让我相信spring无法找到自定义表单的资源
当我尝试访问任何其他.jsp(如testpage.jsp
)时,会出现以下错误(当应用程序从我的IDE运行时,这也可以正常工作):
我正在使用docker容器部署我的应用程序,该容器使用java-jar myserver.war
运行.war文件,因此这对我来说是可行的
如何确保Spring在执行.war文件时能够找到我提供的资源?默认情况下,Maven希望jsp位于/WEB-INF/*位置 您可以将jsp保存在
src/main/webapp/WEB-INF/jsp
中。您还可以相应地更新InternalViewResolver
前缀
有关详细说明,请参考尝试将JAR保存在src/main/webapp/WEB-INF/jsp中。。你也可以考虑建立一个胖罐子而不是战争(如果你还没有)。根据你的图片,你得到了HTTP 500内部服务器错误,你可以分享你的堆栈跟踪吗?原来解决方案确实是把它放入Web-INF -所以我的文件夹结构是<代码> SRC/main /WebAPP/WEB-INF/JSP现在它起作用了。如果你想提供答案,我可以接受。