2016-08-23 2 views
0

У меня есть приложение Spring Boot с функцией Spring Security. На базовом уровне он в значительной степени совпадает с учебником Spring. Мой вопрос: когда я попал на главную страницу, он вызывает контроллер входа (дважды). Зачем? Не легко понять, что он делает это с базовой настройкой, так как он просто показывает домашнюю страницу. Но если я добавлю класс LoginController, он будет вызван (дважды) при загрузке домашней страницы. Другой способ увидеть это - добавить недопустимый тег thymeleaf для login.html templage, он выдает ошибку, даже если домашняя страница не должна быть аутентифицирована. Любое объяснение поможет.Весенняя загрузка с приложением Spring Security при загрузке учетной записи при загрузке на домашней странице

Мой код:

Применение:

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

WebSecurityConfig:

@Configuration 
@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 
    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
      .authorizeRequests() 
       .antMatchers("/").permitAll() 
       .anyRequest().authenticated() 
       .and() 
      .formLogin() 
       .loginPage("/login") 
       .permitAll() 
       .and() 
      .logout() 
       .permitAll(); 
    } 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth 
      .inMemoryAuthentication() 
       .withUser("user").password("password").roles("USER"); 
    } 
} 

HomeController:

@Controller 
public class HomeController { 
    @RequestMapping(value="/", method=RequestMethod.GET) 
    public String getHomePage(Model model) { 
     return "home"; 
    } 
} 

Дополнительный LoginController, будет вызвана при ударе й е главная страница:

@Controller 
public class LoginController { 
    @RequestMapping(value="/login", method=RequestMethod.GET) 
    public String getLoginPage(Model model) { 
     return "login"; 
    } 
} 
+0

Как вы подтвердили, что контроллер входа в систему дважды вызывался при загрузке домашней страницы? Из журналов? (если да, можете ли вы поделиться журналами). – rhinds

+0

поставил точку останова или просто заявление на печать ... на самом деле он вызывает один раз, должно быть что-то в моем html, что вызвало его вызов дважды, но теперь его вызывают один раз. – ikcodez

ответ

0

Вы, вероятно, следует добавить в RequestMapping в LoginController.

Но почему у вас есть HomeController и LoginController, когда у вас уже есть эти сопоставления в addViewControllers?

+0

извините, плохое форматирование ... исправил его. тем не менее, возникает вопрос, почему контроллер входа в систему вызывается и, что еще более важно, почему он обрабатывает шаблон login.html (или, кажется, делает это, и дважды)? – ikcodez

+0

, возможно, это связано с любой ссылкой, которая у вас есть в вашем шаблоне входа/дома. например, у вас может быть ссылка на файл image/js/css, который заблокирован вашей конфигурацией безопасности. –

+0

для тестирования, мой домашний шаблон - это просто – ikcodez