一、Model
package com.gl.model;
import java.util.Date;
import lombok.Data;
@Data
public class User {
private Integer id;
private String username;
private String password;
private Date createtime;
}
二、Mapper映射
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gl.mapper.LoginMapper">
<select id="findByUsername" resultType="com.gl.model.User">
SELECT * FROM user
where username=#{username}
</select>
</mapper>
三、Mapper接口
package com.gl.mapper;
import com.gl.model.User;
public interface LoginMapper {
public User findByUsername(String username);
}
四、Service
package com.gl.service;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.gl.mapper.LoginMapper;
@Service
public class LoginService {
@Resource
LoginMapper loginMapper;
// 判断用户是否存在
public boolean isUserExist(String username) {
if (loginMapper.findByUsername(username) == null) {
return false;
} else {
return true;
}
}
// 根据提供的用户名取得密码
public String getPasswordByUsername(String username) {
return loginMapper.findByUsername(username).getPassword();
}
}
五、Controller
package com.gl.controller;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.requestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.gl.service.LoginService;
@Controller
public class LoginController {
@Resource
LoginService loginservice;
// 定位登录页面
@RequestMapping({ "/", "/login.html" })
public String toLoginPage() {
return "/login";
}
// @RequestMapping(value = "/user/login", method = RequestMethod.POST)
@PostMapping("/login")
public String login(@RequestParam("username") String username, @RequestParam("password") String password,
Map<String, Object> map, HttpSession session) {
if (!loginservice.isUserExist(username)) {
map.put("msg", "用户名不存在!");
} else {
if (password.equals(loginservice.getPasswordByUsername(username))) {
session.setAttribute("loginUserName", username);
map.put("msg", "登录成功!");
} else {
map.put("msg", "登录密码错误");
return "/login";
}
}
return "redirect:/index.html";
}
}
六、Thymeleaf
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<h2>登录</h2>
<form action="index.html" th:action="@{/login}" method="post">
<p style="color: red" th:text="${msg}" th:if="${not #strings.isEmpty(msg)}"></p>
用户名:<input type="text" name="username"><br />
密码:<input type="text" name="password"><br />
<input id="btn-query" type="submit" value="登录" />
</form>
</body>
</html>
七、component
package com.gl.component;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
/**
* 登陆检查
*/
public class LoginHandlerInterceptor implements HandlerInterceptor {
// 目标方法执行之前
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
Object user = request.getSession().getAttribute("loginUserName");
if (user == null) {
// 未登陆,返回登陆页面
request.setAttribute("msg", "没有权限请先登陆");
request.getRequestDispatcher("/login.html").forward(request, response);
return false;
} else {
// 已登陆,放行请求
return true;
}
}
}
八、config
package com.gl.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.gl.component.LoginHandlerInterceptor;
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// SpringBoot已经做好了静态资源映射
registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/login.html",
"/", "/login");
}
}
,