2017-12-11 4 views
0

ich den erholsamen api unter „/api/*“ mit Genehmigung benötigen, alle anderen Routing wie „/“ und „/**“ url geht ohne Genehmigung „/resources/static/index.html“ zu. (das index.html verwendete Polymer, um das Routing zu handhaben).feder webflux URL umleiten und statische HTML und Rest api Routing

Ist es möglich, dies zu erreichen?

+0

verwenden Sie das WebFlux Annotationsmodell oder das funktionale? Kannst du etwas Code posten, um zu zeigen, was du versucht hast? –

Antwort

0

zuletzt bearbeitet: ".httpBasic(). Und(). FormLogin(). Und()", es funktioniert für "/ api/**" Autorisierung. aber es gibt immer noch ein Problem beim Besuch "http://127.0.0.1:8080/template-one/gzgg", die ich beabsichtigte, würde es auf "http://127.0.0.1:8080" umleiten.

Ich versuchte

@Bean 
public MapReactiveUserDetailsService userDetailsRepository() { 
    UserDetails admin = User.withDefaultPasswordEncoder().username("admin").password("123").roles("ADMIN").build(); 
    UserDetails santiago = User.withDefaultPasswordEncoder().username("santiago").password("456").roles("USER").build(); 
    return new MapReactiveUserDetailsService(admin,santiago); 
} 

@Bean 
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) { 
    return http 
      .authorizeExchange() 
      .pathMatchers(HttpMethod.GET, "/api/**").hasRole("ADMIN") 
      .pathMatchers(HttpMethod.POST, "/api/**").hasRole("ADMIN") 

      .pathMatchers(HttpMethod.GET, "/**").permitAll() 
      .pathMatchers(HttpMethod.POST, "/**").permitAll() 
      //.pathMatchers("https://stackoverflow.com/users/{user}/**").access(this::currentUserMatchesPath) 
      .anyExchange().authenticated() 
      .and() 
      .httpBasic().and() 
      .formLogin().and() 
      .build(); 
} 

und

@Configuration 
public class GlobalRouter { 

@Bean 
RouterFunction<?> routerFunction() { 
    RouterFunction router = resources("/**", new ClassPathResource("static/")); 
    return router; 

    } 
} 

und

@Component 
public class CustomWebFilter implements WebFilter { 
@Override 
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { 
    if (exchange.getRequest().getURI().getPath().equals("/")) { 
     return chain.filter(exchange.mutate().request(exchange.getRequest().mutate().path("/index.html").build()).build()); 
    } 

    return chain.filter(exchange); 
} 
} 

Es ist OK zu besuchen "Ressourcen/static/index.html" verwenden, aber während "http://localhost:8080/api/person/all" Besuch , Ich gebe "admin"/"123" für die Authentifizierung ein, aber die Authentifizierung ist fehlgeschlagen.