Как войти в клиентский интерфейс через zuul api-gateway - PullRequest
1 голос
/ 24 октября 2019

Я пытаюсь войти в клиентский интерфейс через zuul api-gateway. У меня есть два модуля api-шлюза, работающие на порту 8000 (т. Е. http://localhost:8000) и erp-service, работающие на порту 8010 (т. Е. http://localhost:8010)

. Следующие настройки я добавил в api-gatewayapplication.yml

zuul:  
  sensitive-headers: Cookie,Set-Cookie
  ignoredServices: '*' 
  admin-services:
    path: /_v/**
    sensitiveHeaders: Cookie,Set-Cookie
    serviceId: erp-service
    stripPrefix: false

и в erp-service application.yml

server:
   port: 8010
   servlet:
     contextPath: /_v

Я использую функцию весенней безопасности formLogin и страницу входа. Ниже приведена моя конфигурация безопасности весны

@Configuration
@EnableWebSecurity
@EnableScheduling
public class SpringSecurtiyConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private AccessDeniedHandler accessDeniedHandler;

    @Autowired
    private AlphaUserDetailsService userDetailsService;

    @Autowired
    private BCryptPasswordEncoder bCryptPasswordEncoder;


    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/bootstrap/**").antMatchers("/dist/**").antMatchers("/plugins/**");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests().antMatchers("/bootstrap/**").permitAll().antMatchers("/dist/**").permitAll()
                .antMatchers("/install/role").permitAll().antMatchers("/plugins/**").permitAll().antMatchers("/login").permitAll()
                .anyRequest().authenticated().and().csrf().disable()
                .formLogin().loginPage("/login").failureUrl("/login?error=true")
                .defaultSuccessUrl("/home", true)
                .usernameParameter("email").passwordParameter("password")
                .and()
                .logout().permitAll().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/")
                .invalidateHttpSession(true).deleteCookies("JSESSIONID").and().exceptionHandling()
                .accessDeniedPage("/access-denied").accessDeniedHandler(accessDeniedHandler);
        http.headers().frameOptions().sameOrigin();
    }

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder);
    }

}

и Controller

@Controller
public class RootController {

    @GetMapping(value = {"/", "/login"})
    public String getLandingPage() {        
        if(!SecurityContextHolder.getContext().getAuthentication().getPrincipal().equals(AlphaConstants.ANONYMOUS_USER)) {  
            return "redirect:/home";
        }
        return "login";
    }

    @GetMapping(value = "/home")
    public String getHomePage() {
        if(!SecurityContextHolder.getContext().getAuthentication().getPrincipal().equals(AlphaConstants.ANONYMOUS_USER)) {
            return "home";
        }
        return "login";
    }
}

Я могу загрузить страницу входа в браузер http://localhost:8000/_v/login

после ввода учетных данных и нажать кнопку входа в URL-адрес браузера http://localhost:8000/_v/login меняется на http://localhost:8010/_v/login, что означает erp-service url, но я хочу, чтобы оно оставалось на api-gateway url с домашней страницейкак http://localhost:8000/_v/home

Я прошел по ссылкам ниже, но у меня это не сработало.
Zuul Routing on Root Path
Spring Cloud:перенаправление по умолчанию со шлюза на интерфейс пользователя
https://github.com/spring-cloud/spring-cloud-netflix/issues/2787

Нет ошибок в консоли средства разработки.
помогите пожалуйста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...