Spring 引导 URL 静态映射 HTML
Spring Boot URL mapping for static HTML
我的 Spring 引导应用程序基本上由两个主要部分组成 "modules":
- 一个包含静态HTML页面的"Web"模块,供public(unauthenticated/anonymouse用户使用);和
- 一个"App"模块,由许多动态页面组成,每个动态页面都需要(Spring基于安全的)身份验证才能访问
基本的应用程序结构是:
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
:登录后进入的Dashboard/landing页面,映射自http://localhost:8080/account
http://localhost:8080/account/*
下的所有其他页面将是具有典型 @RequestMapping
映射的 MVC/dynamic 页面
我不清楚的是,对于静态 ("public web") HTML 页面,我是否:
- 只使用标准的基于控制器的
@RequestMappings
渲染一些 Thymeleaf/Handlebars 模板(因为内容是静态的,所以没有数据模型)?或者我:
- 是否将这些页面视为静态内容(与 CSS/JS 相同)并将它们作为 static content as Spring Boot prescribes 提供?如果这是正确的选项,那么我如何实现正确的 URL 映射(例如,用户可以转到
http://localhost:8080/contact
而不是 http://localhost:8080/contact.html
)?
首先,您需要像这样通过 mvc 解析器映射您的视图:
@Configuration
public class WebMVCconfig extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/login").setViewName("login");
registry.addViewController("/contact").setViewName("contact");
}
}
映射您的视图后,我们需要在 antMatchers
中添加类似 /login
的视图,因此我假设您的配置方法如下所示:
@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 安全性不会处理这些页面的身份验证,这解决了您的问题
我的 Spring 引导应用程序基本上由两个主要部分组成 "modules":
- 一个包含静态HTML页面的"Web"模块,供public(unauthenticated/anonymouse用户使用);和
- 一个"App"模块,由许多动态页面组成,每个动态页面都需要(Spring基于安全的)身份验证才能访问
基本的应用程序结构是:
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
:登录后进入的Dashboard/landing页面,映射自http://localhost:8080/account
http://localhost:8080/account/*
下的所有其他页面将是具有典型@RequestMapping
映射的 MVC/dynamic 页面
我不清楚的是,对于静态 ("public web") HTML 页面,我是否:
- 只使用标准的基于控制器的
@RequestMappings
渲染一些 Thymeleaf/Handlebars 模板(因为内容是静态的,所以没有数据模型)?或者我: - 是否将这些页面视为静态内容(与 CSS/JS 相同)并将它们作为 static content as Spring Boot prescribes 提供?如果这是正确的选项,那么我如何实现正确的 URL 映射(例如,用户可以转到
http://localhost:8080/contact
而不是http://localhost:8080/contact.html
)?
首先,您需要像这样通过 mvc 解析器映射您的视图:
@Configuration
public class WebMVCconfig extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/login").setViewName("login");
registry.addViewController("/contact").setViewName("contact");
}
}
映射您的视图后,我们需要在 antMatchers
中添加类似 /login
的视图,因此我假设您的配置方法如下所示:
@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 安全性不会处理这些页面的身份验证,这解决了您的问题