1、引入依赖不配置
springBoot的启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
默认的账号为:user ,密码在控制台打印输出
2、编写一个
3、SpringSecurity如何获取参数的?
前端、请求为 /userLogin
<form class="form-signin" th:method="post" th:action="@{/userLogin}">
<h1 class="h3 mb-3 font-weight-normal">请登录</h1>
<input type="text" class="form-control" placeholder="用户名" required="" autofocus="" name="username">
<br>
<input type="password" class="form-control" placeholder="密码" required="" name="password">
<div class="checkbox mb-3">
<label>
<input type="checkbox" name="rememberme"> 记住我
</label>
</div>
<button class="btn btn-lg btn-primary btn-block" type="submit" >登录</button>
</form>
controller层,写的请求是 /userLogin
@GetMapping("/userLogin")
public String login(){
return "login/login";
}
SpringSecurity 配置类获取参数并校验
http.formLogin()
.loginPage("/userLogin").permitAll() //认证之前跳转的页面
.usernameParameter("username").passwordParameter("password")
.defaultSuccessUrl("/test") //成功之后的跳转,重定向
.failureUrl("/userLogin?error"); //登录失败之后的跳转,转发
当我表单点击提交的时候,并没有走controller层的方法(已测试)。但是我不理解SpringSecurity 是如何让表单不走controller的方法同时获取到表单里面的参数。
找到问题所在了
上面的配置类对比一下下面的配置类
http.formLogin()
.loginPage("/userLogin").permitAll() //认证之前跳转的页面,登录访问路径默认和登录页面路径一致
.loginProcessingUrl("/ceshi") //登录访问路径,这个是表单账号密码提交的路径
.usernameParameter("username").passwordParameter("password")
.defaultSuccessUrl("/test") //成功之后的跳转,重定向
.failureUrl("/userLogin?error"); //登录失败之后的跳转,转发
解释:上面的 .loginProcessingUrl("/ceshi") 如果没有写的话,登录访问路径默认和登录页面路径一致。本身这个表单就不走controller层的方法,为什么不走?很大原因是拦截器的问题(可以去看源码)。