1. 登陆
这个登陆功能先不连接数据库,只需填写任意用户名,密码是123456即可登陆成功来到后台
1.1 清缓存
开发期间模板引擎页面修改以后,要实时生效
-
禁用模板引擎的缓存
# 禁用缓存 spring.thymeleaf.cache=false
-
页面修改完成以后ctrl+f9,重新编译
1.2 配置首页
1.3 控制器方法
@Controller
public class LoginController {
//@RequestMapping(value = "/user/login" , method = RequestMethod.POST)
@PostMapping(value = "/user/login")
public String login(@RequestParam("username") String username,
@RequestParam("password") String password, Map<String,Object> map){
if(!StringUtils.isEmpty(username) && "123456".equals(password)){
//登陆成功
return "dashboard";
}else{
//登陆失败
map.put("msg","用户名或密码错误");
return "login";
}
}
}
1.4 添加错误提示
运行测试
1.5 重定向
- 为了解决上面表单重复提交和样式丢失的问题,我们在前面写好的mvc配置类
MyMvcConfig
的webMvcConfigurerAdapter
方法中添加//让main页面转到dashboard页面 registry.addViewController("/main.html").setViewName("dashboard");
- 然后在控制器方法中,使成功后跳转到main页面
if(!StringUtils.isEmpty(username) && "123456".equals(password)){ //登陆成功,防止表单重复提交,可以重定向到主页 return "redirect:/main.html"; }
运行测试
2. 拦截器
虽然登录后能成功跳转到目标页面,但是我们能发现目标页面的地址是
http://localhost:8080/main.html
,我们复制后在新窗口或别的浏览器也能打开,这样就失去登录的意义了,所以我们这里要使用拦截器进行登陆
2.1 将用户信息放到session中
@Controller
public class LoginController {
//@RequestMapping(value = "/user/login" , method = RequestMethod.POST)
@PostMapping(value = "/user/login")
public String login(@RequestParam("username") String username,
@RequestParam("password") String password,
Map<String,Object> map, HttpSession session){
if(!StringUtils.isEmpty(username) && "123456".equals(password)){
//登录成功,防止表单重复提交,可以重定向到主页
session.setAttribute("loginUser",username);
return "redirect:/main.html";
}else{
//登录失败
map.put("msg","用户名或密码错误");
return "login";
}
}
}
2.2 写拦截器component.LoginHandlerInterceptor
/**
* 登录检查
*/
public class LoginHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {//目标方法执行前
Object user = request.getSession().getAttribute("loginUser");
if(user == null){
//未登陆,返回登录页面
request.setAttribute("msg","没有权限,请登录");
request.getRequestDispatcher("/index.html").forward(request,response);
return false;
}else {
//已登录,放行请求
return true;
}
}
}
2.3 到MyMvcConfig.webMvcConfigurerAdapter
注册拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {//注册拦截器
//springboot已做好静态资源映射(css、js)
//addPathPatterns表示对那些部分进行拦截
//excludePathPatterns表示不拦截哪些部分
registry.addInterceptor(new LoginHandlerInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/index.html","/","/user/login");
}
2.4 跳转后显示登录的用户名
运行测试
该SpringBoot学习笔记学习自雷神前辈,是对知识点的整理和自我认识的梳理,如有不当之处,欢迎指出