静态HTML的Spring Boot URL映射

时间:2016-05-28 11:17:34

标签: spring-boot static-content

我的Spring Boot应用程序基本上由两个主要的“模块”组成:

  • 一个“Web”模块,由静态HTML页面组成,可供公众使用(未经身份验证的/匿名用户);和
  • “App”模块,由许多动态页面组成,每个动态页面都需要(基于Spring Security的)身份验证才能访问

基本的app结构是:

  • index.html:主页,从http://localhost:8080/
  • 映射
  • about.html:关于页面,从http://localhost:8080/about
  • 映射
  • contact.html:联系页面,从http://localhost:8080/contact
  • 映射
  • login.html:登录页面,从http://localhost:8080/login
  • 映射
  • dashboard.html:登录后访问的仪表板/登录页面,从http://localhost:8080/account
  • 映射
  • http://localhost:8080/account/*下的所有其他网页都是具有典型@RequestMapping映射的MVC /动态网页

对我来说,不清楚的是,对于静态(“公共网页”)HTML页面,我是否:

  • 只需使用标准的基于控制器的@RequestMappings来渲染一些Thymeleaf / Handlebars模板(由于内容是静态的,因此根本没有数据模型)?或者我:
  • 将这些页面视为静态内容(与CSS / JS相同)并将其作为static content as Spring Boot prescribes提供?如果这是正确的选项,那么如何实现正确的URL映射(例如,用户可以转到http://localhost:8080/contact而不是http://localhost:8080/contact.html)?

1 个答案:

答案 0 :(得分:1)

首先,您需要通过mvc解析器映射您的视图,如下所示:

@Configuration
public class WebMVCconfig extends WebMvcConfigurerAdapter {

@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/login").setViewName("login");
    registry.addViewController("/contact").setViewName("contact");

   }
} 

在映射您的视图后,我们需要在/login中添加antMatchers之类的视图,所以假设您的配置方法如下所示:

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

    .csrf().disable()   

    .authorizeRequests()
    .antMatchers("/contact","/about", ...).permitAll() //add your static pages here ( public pages ) 
    .anyRequest()
        .authenticated()        
            .and()
            .formLogin()
            .loginPage("/login")
            .permitAll()
            .successHandler(successHandler) // i don't think you'll be needing this it's to redirect the user if it's admin or a simple user 
            .and()  // this is for the logout   
            .logout()
            .invalidateHttpSession(true)
            .logoutUrl("/logout")
            .permitAll();   
}

antMatchers spring security中添加您的视图后,不会处理这些页面的身份验证并解决您的问题