我有整个前端部分在资源中铺设的应用程序。我想将事情分开。并且具有用于UI的单独服务器,例如由gulp提供。
因此我假设我的服务器应该为客户端呈现的所有请求返回index.html
。
例如:我有'user /:id'路由,它通过角度路由进行管理,不需要任何服务器。如何配置以便服务器不会重新加载或重定向到任何地方?
我的安全配置正在关注(不知道它是否负责此类事情):
public class Application extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/**").authorizeRequests().antMatchers("/", "/login**", "/webjars/**", "/app/**", "/app.js")
.permitAll().anyRequest().authenticated().and().exceptionHandling()
.authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/")).and().logout()
.logoutSuccessUrl("/").permitAll().and().csrf()
.csrfTokenRepository(csrfTokenRepository()).and()
.addFilterAfter(csrfHeaderFilter(), CsrfFilter.class)
.addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class);
}
答案 0 :(得分:13)
对于路由,根据this guide at Using "Natural" Routes
(特别是here),您必须添加执行以下操作的控制器:
index.html
然后使用Spring Boot,/
加载private SolidColorBrush _backgroundColor = new SolidColorBrush(Colors.Yellow);
public SolidColorBrush BackgroundColor
{
get { return _backgroundColor; }
set
{
_backgroundColor= value;
OnPropertyChanged();
}
}
,并且可以加载资源;路线由Angular处理。
答案 1 :(得分:2)
如果你使用Angular和Spring Data Rest,我认为最直接的方法是使用角度哈希位置策略。
将它放在app模块的providers数组中:
{ provide: LocationStrategy, useClass: HashLocationStrategy }
答案 2 :(得分:0)
EpicPandaForce有一个很好的答案,我想对其进行扩展。以下端点也将允许在嵌套路由上进行匹配。如果您希望拥有一个admin部分,则可以对其进行配置以返回不同的index.html。
@Controller
class PageController {
@GetMapping("/**/{path:[^\\.]*}")
fun forward(request: HttpServletRequest): String? {
if(request.requestURI.startsWith("/admin")) {
return "forward:/admin/index.html"
}
return "forward:/index.html"
}
}
此RequestMapping(或@GetMapping)的工作方式是排除任何包含句点(即“ index.html”)的请求。