java - 如何将资源文件夹中的html文件与Spring Boot连接起来?
问题描述
我的 SpringWebConfiguration.class 在这里:
@Configuration
@EnableWebSecurity
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
private static Logger logger = LoggerFactory.getLogger(SpringSecurityConfig.class);
@Autowired
private UserDetailsService userDetailsService;
@Autowired
private PasswordEncoder passwordEncoder;
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/resources/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
logger.info("-----configure(HttpSecurity http)");
http.authorizeRequests()
.antMatchers("/**").permitAll()
.antMatchers("/admin/**").hasAnyRole("ADMIN")
.antMatchers("/user/**").hasAnyRole("USER")
.anyRequest().authenticated()
.and()
.formLogin()
.loginProcessingUrl("/login")
.loginPage("/login")//
.defaultSuccessUrl("/userAccountInfo")//
.failureUrl("/login?error=true")//
.usernameParameter("username")//
.passwordParameter("password")
.defaultSuccessUrl("/")
.permitAll().
and().rememberMe().rememberMeParameter("remember-me").key("uniqueAndSecret").tokenValiditySeconds(1296000).userDetailsService(userDetailsService)
.and()
.logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/")
.deleteCookies("guid")
.deleteCookies("JSESSIONID")
.permitAll()
.and().csrf().disable();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
logger.info("-----configureGlobal(AuthenticationManagerBuilder auth)");
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder);
}
}
我的登录控制器:
@RestController
public class LoginController() {
@GetMapping("/login")
public String login(Model model) {
return "/login";
}
}
我的html文件:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<title>Bootstrap Example</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<h2>Stacked form</h2>
<form th:action="@{/login}" method="post">
<div class="form-group">
<label for="email">Email:</label>
<input type="email" class="form-control" id="email" placeholder="Enter email" name="email">
</div>
<div class="form-group">
<label for="pwd">Password:</label>
<input type="password" class="form-control" id="pwd" placeholder="Enter password" name="pswd">
</div>
<div class="form-group form-check">
<label class="form-check-label">
<input class="form-check-input" type="checkbox" name="remember"> Remember me
</label>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</body>
</html>
当我打开浏览器并转到“localhost:8080/login”时。它返回字符串“/login”,而不是 html 登录页面。为什么?也许我错过了一些连接到我的 html 文件的东西。我认为我的控制器需要类似 url 的东西来连接到 html 文件。我不明白它是如何正常工作的。请帮帮我!
解决方案
首先需要修改LoginController
@Controller
public class LoginController() {
@GetMapping("/login")
public String login(Model model) {
return "/login";
}
}
如果它不起作用,则将 html 转换为 jsp 页面。
推荐阅读
- c++ - Qt 应用程序找不到第 3 方 DLL 并崩溃
- python - 继续 for 循环而不进行迭代
- apache-spark - 是否可以使用 Spark Streaming SQL 实时解析来自 Kafka 主题的 JSON 字符串?
- c - 如何检查 % 无法识别的 scanf 输入
- linux-kernel - 可重入内核和抢占内核之间有什么关系?
- c# - 在不使用 IDataProtector 的情况下,在 ASP.NET Core 中加密 cookie 的简单/体面方法是什么?
- heroku - 在“应用程序”中找不到应用程序对象“服务器”
- php - MySQL 双表 INNER JOIN , LEFT JOINED 到第三张表,只有一行具有最低值
- javascript - 模板文字 HTML 表格
- java - 与杰克逊的一对多 Json 响应不起作用