仅在IDE

时间:2017-06-26 15:39:00

标签: spring-mvc spring-boot jar war

我正在使用 Spring Boot 开发REST-API。现在我想充当OAuth2提供者,因此我想添加对" client_credentials"的支持。授予类型。

为了做到这一点,我必须允许用户登录并授权客户端。 Spring提供了一个丑陋的默认登录表单,所以我现在想要显示自己的自定义登录表单

问题是我无法在IDE之外使用它。

我的配置如下:

@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;
    }

我的文件夹结构如下所示:

enter image description here

当我在Eclipse中运行我的应用程序并访问http://localhost:8080/login时,一切正常,并显示我的自定义登录表单。当我使用maven打包我的应用程序并执行生成的 .war文件时,访问http://localhost:8080/login会显示丑陋的默认登录表单,这会让我相信spring无法找到我自定义的资源形成。

当我尝试访问testpage.jsp之类的任何其他.jsp时,我收到以下错误(当我的IDE运行该应用程序时,这也可以正常工作):

enter image description here

我正在使用使用java -jar myserver.war运行.war文件的docker容器部署我的应用程序,所以这对我有用。

如何在执行.war文件时确保Spring能够找到我提供的资源?

1 个答案:

答案 0 :(得分:1)

默认情况下,Maven期望在/ WEB-INF / *位置使用jsp。

您可以将jsp保留在NA中。您也可以相应地更新# # create example data # before.df <- data.frame("SN" = c(1, 2), "rad" = 0, "grid" = 47, "M" = c(1.000562, 1.00222), "extra" = c(24, 9)) after.df <- data.frame("SN" = c(1, 1, 2, 2), "rad" = 0, "grid" = 47, "M" = c(31.1330427146, 32.4380778593, 33.8091346758, 36.7704819283)) # # create empty "extra" column in after.df to match before.df # after.df$extra <- NA # # create "time" id in each dataset to indicate before/after observations # before.df$time <- 0 after.df$time <- 1 combined.df <- rbind(before.df, after.df) src/main/webapp/WEB-INF/jsp

有关详细说明,请参阅https://stackoverflow.com/a/19786283/3981536