springboot+ thymeleaf+security+ajax
跳转页面model的值无法传递到前端页面
登陆页面如图

form表单:
<form class="layui-form" th:action="@{/user/login}" method="post">
<p style="color: red ;text-align: center;" th:text="${lmsg}"th:if="${not #strings.isEmpty(lmsg)}" ></p>
.........
</form>
验证用户名和密码是否正确,否则提示“用户名密码错误”到p标签中
sessionn.setAttribute("lmsg", "用户名或密码错误");
正常来说应该用model.addAttribute()存放数据,但是跳转页面用的重定向,model的值无法传递到前端页面,我就偷了个懒,用session存放的数据,但弊端是一旦登陆失败,刷新登录页面,该数据依旧存在

这好嘛,这不好。
于是我在写完项目之后回过头又完善了一遍
model.addAttribute("lmsg", "用户名或密码错误");
跳转页面不用重定向,同时采用model存放数据
然后,测试了一遍,唉没问题,当我在登陆错误的页面再次登陆错误之后,问题来了
登陆失败返回登陆页面报404错误

emmmm,大家注意看上图的地址,是/user/user/login
,于是我就改了一下地址
@RequestMapping("/login")
从/user/login改成了/login
然后,问题解决!登陆失败一万次地址栏还是/login,并不会user/循环。
ajax实现输入用户名之后判断用户名是否存在
控制层代码
@RequestMapping("/user/name")
@ResponseBody
public String nameIsRepeat(String gname,Model model){
String text;
//查找表单提交的用户名是否存在,存在返回ok,不存在返回用户名不存在
Graduate userByName = dao.findUserByName(gname);
text = (userByName!=null?"ok":"用户名不存在");
return text;
}
ajax代码
<script>
function f1() {
$.post("/user/name", {"gname": $("#gname").val()}, function (data) {
if (data.toString() == "ok") {
//#是按id查找
$("#gname").css("color", "green")
$("#pp0").html(" ");
} else {
$("#gname").css("color", "red");
$("#pp0").html(data.toString());
}
})
}
</script>
表单代码
<input type="text" id="gname" name="gname" required onblur="f1()" lay-verify="required" placeholder="请输入用户名" autocomplete="off" class="layui-input">
<p id="pp0" style="color: red ;text-align: center;"></p>
图示
- 当用户存在时

- 当用户不存在时

注意事项:
- ajax后跟三个参数,分别为提交的url,传给控制层的参数,提交成功执行的方法,其中data接受的就是控制层返回的text
- 控制层要加@ResponseBody注解
- 控制层传入的参数gname必须和ajax{“gname”: $("#gname").val()}冒号左侧同名
本文档介绍了在SpringBoot项目中使用Thymeleaf和Spring Security进行登录验证,遇到的登录失败后重定向导致的问题及解决方案。同时,展示了如何通过Ajax实现用户名存在的实时验证,包括前端Ajax请求和后端控制器的响应处理。在修复登录失败后的重定向问题后,确保了登录页面的正常显示,并提供了关于Ajax验证的详细代码示例。
2128





