1、我们把登录页面的表单提交地址写一个controller!
<form class="form-signin" th:action="@{/user/login}" method="post">
//这里面的所有表单标签都需要加上一个name属性
</form>
2、去编写对应的controller
传入HttpSession session 然后再session中把username注入
@Controller
public class LoginController {
@PostMapping("/user/login")
public String login(@RequestParam("username") String username,
@RequestParam("password") String password,
Model model, HttpSession session){
if (!StringUtils.isEmpty(username) && "123456".equals(password)){
session.setAttribute("loginUser",username);
return "dashboard";
}else {
model.addAttribute("msg","用户名密码错误");
return "index";
}
}
}
3、我们再添加一个视图控制映射,在我们的自己的MyMvcConfig中: (一会编写了拦截器类还要注册到MVC配置类中)
registry.addViewController("/main.html").setViewName("dashboard");
4、将 Controller 的代码改为重定向
/登录成功!防止表单重复提交,我们重定向
return "redirect:/main.html";
5、自定义一个拦截器:
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;
}
}
}
6、 然后将拦截器注册到我们的SpringMVC配置类当中!
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/login.html","/","/user/login","/css/*","/js/**","/img/**");
}
7、测试登录
- 不登录直接访问main.html页面 会提示没有权限 让你先登录 并留在登录页面
- 登录成功后 成功跳转至主页面
主要就是通过一个HttpSession对象来判断用户是否登录了, - 如果用户登录成功了,就把用户信息注入session值里面,然后在拦截器类去request.getSession()获取用户session不为空就 返回一个true
- 用户session对象如果为空,就request.getRequestDispatcher("/login.html")返回flase
|