Это означает, что браузер не распознает ответ, предполагает, что это файл (в крайнем случае)
У вас есть этот контроллер:
@GetMapping(path = "/")
public String displayInitialPage(Model model) {
return "index";
}
Итак, Spring примет значение"index"
и попробуйте сопоставить это с каким-то контентом.Здесь за кулисами происходит много магии.
Допустим, вы используете Spring Boot и у вас сборка gradle, ваши зависимости:
compile group: "org.springframework.security", name: "spring-security-core", version: "$springSecurityVersion"
compile group: "org.springframework.security", name: "spring-security-web", version: "$springSecurityVersion"
compile group: "org.springframework.boot", name: "spring-boot-starter-web", version: "$springBootVersion"
compile group: "org.springframework.boot", name: "spring-boot-starter-security", version: "$springBootVersion"
compile group: "org.springframework.boot", name: "spring-boot-starter-thymeleaf", version: "$springBootVersion"
compile group: "org.thymeleaf.extras", name: "thymeleaf-extras-springsecurity5", version: "$thymeleafExtrasSpringSecurityVersion"
Обратите внимание на последние две строки.Они позволяют thymeleaf как шаблонизатор.Spring будет искать в каталоге
./src/main/resources/templates
файл с именем index.html
Этот файл может выглядеть следующим образом:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5">
<head>
<title>Spring Security - Simple Flow for Spring Boot Authentication</title>
<meta charset="utf-8" />
</head>
<body>
<div style="float: right" th:fragment="logout" sec:authorize="isAuthenticated()">
<div style="float:left">
<span style="font-weight:bold">User: </span><span sec:authentication="name"></span>
</div>
<div style="float:none"> </div>
<div style="float:right">
<form action="#" th:action="@{/local/logout}" method="post">
<input type="submit" value="Local Logout" />
</form>
</div>
</div>
<h1>Success</h1>
</body>
</html>
Внутри Spring Web MVC, тамэто bean-компонент с именем
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/templates/");
viewResolver.setSuffix(".html");
....
return viewResolver;
}
. Spring Boot имеет компонент, называемый автоматической настройкой.Таким образом, он ищет присутствующие библиотеки и соответствующим образом настраивает распознаватели.Существуют распознаватели JSP для устаревших приложений, распознаватели сопоставления контента, когда вы хотите отправить обратно JSON, XML или другие форматы, и мой предпочтительный, thymeleaf, для отправки содержимого HTML.
В любой момент времени,Вы можете настроить несколько распознавателей.
В репозитории моего сообщества есть много примеров, с которыми можно поиграть.
https://github.com/fhanik/spring-security-community/tree/master/samples