При доступе к контекстному пути (папка root) страница входа в Spring Boot Application не отображается - PullRequest
5 голосов
/ 12 марта 2020

В моем Spring Boot (2.0) приложении я установил путь к контексту в моем файле application.properties, как показано ниже

server.servlet.context-path=/myApp

Кроме того, у меня есть следующий класс настроек безопасности расширение WebSecurityConfigurerAdapter

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // TODO Auto-generated method stub


        http
        .csrf().disable()
        .authorizeRequests()
        .antMatchers(HttpMethod.GET,"/uifiles/dist/css/**").permitAll()
        .antMatchers(HttpMethod.GET,"/uifiles/plugins/icheck-bootstrap/**").permitAll()
        .antMatchers(HttpMethod.GET,"/uifiles/plugins/fontawesome-free/css/**").permitAll()
        .antMatchers(HttpMethod.GET,"/css/**").permitAll()
        .antMatchers(HttpMethod.GET, "/uifiles/**").permitAll()
        .antMatchers(HttpMethod.GET, "/error/**").permitAll()
        .antMatchers(HttpMethod.GET,"/files/**").permitAll()
        .antMatchers(HttpMethod.GET,"/files/fonts/**").permitAll()
        .antMatchers(HttpMethod.GET,"/files/images/**").permitAll()
        .and()
        .authorizeRequests().antMatchers("/login").permitAll()
        .anyRequest().authenticated()
        .and()
        .formLogin()
        .loginPage("/login")
        .successForwardUrl("/home")
        .defaultSuccessUrl("/home")
        .permitAll()
        .and()
        .logout()
        .invalidateHttpSession(true)
        .clearAuthentication(true)
        .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
        .logoutSuccessUrl("/login")
        .and()
        .exceptionHandling().authenticationEntryPoint(authenticationEntryPoint());  

    }

Когда я запускаю приложение (из Spring Tool Suit ) и получаю доступ к приложению через url

http://localhost: 8080 / myApp / login

работает нормально и открывает страницу входа

Но, когда я ввожу

http://localhost: 8080 / myApp /

перенаправляет меня на http://localhost: 8080 / login (Это дает страницу 404)

Я хочу оба http://localhost: 8080 / myApp / & http://localhost: 8080 / myApp / login , чтобы открыть страницу входа

Страница входа находится в root папки проекта. Кроме того, у меня есть spring.mvc.view.suffix=.jsp в моем application.properties. Таким образом, контроллер автоматически добавляет расширение файла для запросов.

Функциональность выхода из системы работает нормально, и он перенаправляет на http://localhost: 8080 / myApp / login

  • Пружинный ботинок 2.1.7
  • Tomcat 9.0.21
  • JDK 1.8

Ответы [ 4 ]

1 голос
/ 20 марта 2020

Общий удар по этому вопросу - я смутно помню, что это абсолютный редирект с годами go.

Попробуйте "$ {server.servlet.context-path} / login" в качестве значения для loginPage.

Если это сработает - отлично, если нет, я попытаюсь углубиться в это и посмотреть, что я смогу найти.

0 голосов
/ 23 марта 2020

Можете ли вы отладить код, добавьте точку отладки в класс

org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint

имя метода buildRedirectUrlToLoginPage. Отследить проблему будет легко.

0 голосов
/ 22 марта 2020

Обновление

.authorizeRequests().antMatchers("/login").permitAll()

до

.authorizeRequests() .antMatchers("/").permitAll() .antMatchers("/login").permitAll()

, а также обновление Контроллер @RequestMapping имеет несколько путей, например {"/", "/login"}.

Например:

@Controller
public class ExampleController {

  @RequestMapping(value = { "/", "/login" })
  public String login() {
    return "login";
  }

}
0 голосов
/ 19 марта 2020

Вы пробовали изменить: .loginPage("/login") на .loginPage("/login.html")

...