Как удалить # из URL, приложения SpringBoot и AngularJs? - PullRequest
0 голосов
/ 09 июня 2018

Это мой класс фильтра TuckeyRewriteFilter

public class TuckeyRewriteFilter extends org.tuckey.web.filters.urlrewrite.UrlRewriteFilter {

    @Override
    protected void loadUrlRewriter(FilterConfig filterConfig) throws ServletException {
        String confPath = filterConfig.getInitParameter("confPath");
        ServletContext context = filterConfig.getServletContext();
        try {
            final URL confUrl = getClass().getClassLoader().getResource(confPath);
            final InputStream config = getClass().getClassLoader().getResourceAsStream(confPath);
            Conf conf = new Conf(context, config, confPath, confUrl.toString(), false);
            checkConf(conf);
        } catch (Throwable e) {
            throw new ServletException(e);
        }
    }

}

Это мой основной класс Springboot

public class AdminWebApplication {

    public static final String REWRITE_FILTER_NAME = "rewriteFilter";
    public static final String REWRITE_FILTER_CONF_PATH = "urlrewrite.xml";

    @Autowired
    ApplicationContext applicationContext;

    public static void main(String[] args) {
        SpringApplication.run(AdminWebApplication.class, args);
    }

    @Bean
    public ObjectMapper createObjectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        applicationContext.getAutowireCapableBeanFactory().autowireBean(objectMapper);
        return objectMapper;
    }

    @Bean
    public FilterRegistrationBean rewriteFilterConfig() {
        FilterRegistrationBean reg = new FilterRegistrationBean();
        reg.setName(REWRITE_FILTER_NAME);
        reg.setFilter(new TuckeyRewriteFilter());
        reg.addInitParameter("confPath", REWRITE_FILTER_CONF_PATH);
        reg.addInitParameter("confReloadCheckInterval", "-1");
        reg.addInitParameter("statusPath", "/redirect");
        reg.addInitParameter("statusEnabledOnHosts", "*");
        reg.addInitParameter("logLevel", "WARN");
        return reg;
    }
}

Этоmy urlrewrite.xml Этот файл из конфигурации папки ресурсов работает нормально, загружает страницу входа, но все равно мне нужно передать / # login, затем он перенаправляет на / login URL, но при обновлении браузера я получаю ошибку 404.index.html, я добавил, я не хочу дополнительное доменное имя после идентификатора моего порта.

<urlrewrite default-match-type="wildcard">
    <rule>
        <from>/login</from>
        <to>/login.html</to>//As of now only configured for login page.
    </rule>
    <rule>
        <from>/contact</from>
        <to>/index.html</to>
    </rule>
</urlrewrite>

1 Ответ

0 голосов
/ 09 июня 2018

В вашем файле js router (фаза конфигурации) вам нужно добавить:

$locationProvider.hashPrefix(''); 
$locationProvider.html5Mode(true);

, а в файле index.html необходимо добавить:

<base href="/">

Update 1

После реализации выше на стороне клиента, вам также необходимо настроить отображение URL на стороне сервера.При # сервер игнорирует все, что следует за ним.

http://localhost:8080/#i_will_be_ignored/and_so_do_i

Итак, когда вы настраиваете angularjs для удаления # из URL, ваш запрос выше

http://localhost:8080/i_will_be_ignored/and_so_do_i

теперь будет попадать на сервер с @path('i_will_be_ignored').Теперь это даст вам 404, потому что вы никогда не отображали API для него.Вот почему вы получаете 404 при обновлении страницы.

Необходимо сопоставить все URL-адреса, которые не соответствуют, с index.html, за которым следует непревзойденный URL-адрес.Как только это будет сделано, angularjs возьмет его оттуда и перенаправит на соответствующий route.Я надеюсь, что это поможет вам.

Как-то так вам здесь поможет

...