后台Demo-Login
1、框架构成
运用Springboot框架来构建项目
2、登录的实现
-
创建UserAdministratorDAO接口
增加方法getByNameAndPassword,从数据库查询出相应的用户名和密码
package com.example.fleamarket.dao; import com.example.fleamarket.pojo.UserAdministrator; import org.springframework.data.jpa.repository.JpaRepository; public interface UserAdministratorDAO extends JpaRepository<UserAdministrator,Integer> { UserAdministrator getByNameAndPassword(String name, String password); }
-
创建实体类Category
@Entity表明这是一个实体类,@Table(name = “category”)从数据库中的category表中查询
package com.example.fleamarket.pojo; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @Entity @Table(name = "category") @JsonIgnoreProperties({ "handler","hibernateLazyInitializer" }) public class Category { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") int id; String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Category{" + "id=" + id + ", name='" + name + '\'' + '}'; } }
-
创建UserAdministratorService类
创建get方法
package com.example.fleamarket.service; import com.example.fleamarket.dao.UserAdministratorDAO; import com.example.fleamarket.pojo.UserAdministrator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserAdministratorService { @Autowired UserAdministratorDAO userAdministratorDAO; public UserAdministrator get(String name, String password) { return userAdministratorDAO.getByNameAndPassword(name,password); } }
-
创建AdminPageController
专门用来做页面的跳转
login方法中,将从前端页面获取来的用户名和密码,调用get方法在数据库中查询,若存在则登录成功,进行页面跳转,若不成功,则返回登录页面,并提示用户名或者密码错误。
package com.example.fleamarket.web; import com.example.fleamarket.pojo.UserAdministrator; import com.example.fleamarket.service.ProductService; import com.example.fleamarket.service.UserAdministratorService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import javax.servlet.http.HttpSession; @Controller public class AdminPageController { @Autowired UserAdministratorService userAdministratorService; @Autowired ProductService productService; @GetMapping("/") public String index(){return "index";} @GetMapping("/login") public String login(@RequestParam("username") String username, @RequestParam("password") String password , Model model, HttpSession session){ UserAdministrator user = userAdministratorService.get(username, password); if(user!=null){ session.setAttribute("loginUser",username); return "redirect:main"; }else{ model.addAttribute("msg","用户名或者密码错误!"); return "index"; } } @GetMapping("/exitUser") public String ExitUser(HttpSession session){ session.removeAttribute("loginUser"); return "index"; } @GetMapping("/Database") public String Database(){ return "/admin/listData"; } @GetMapping("/Accumulate") public String Accumulate(){ return "/admin/listAccumulate"; } }
-
在index.html中实现登录的前端页面
<p style="color: red" th:text="${msg}" th:if="${not #strings.isEmpty(msg)}">
根据后台所传的"msg",前端渲染对应的信息
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<title>后台管理网页</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
<link href="css/signin.css" rel="stylesheet">
</head>
<body class="text-center">
<form class="form-signin" action="login">
<img class="mb-4" src="img/bootstrap-solid.svg" alt="" width="72" height="72">
<h1 class="h3 mb-3 font-weight-normal">Please sign in</h1>
<p style="color: red" th:text="${msg}" th:if="${not #strings.isEmpty(msg)}"></p>
<label class="sr-only">Username</label>
<input type="text" name="username" class="form-control" placeholder="Username" required="" autofocus="">
<label class="sr-only">Password</label>
<input type="password" name="password" class="form-control" placeholder="Password" required="">
<div class="checkbox mb-3">
<label>
<input type="checkbox" value="remember-me"> Remember me
</label>
</div>
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
<p class="mt-5 mb-3 text-muted">© 2020-2021</p>
<a class="btn btn-sm">中文</a>
<a class="btn btn-sm">English</a>
</form>
</body>
</html>
3、拦截器
对于页面跳转没有限制,所以即使没有登录也可能会直接进入系统中,所以需要拦截器确认是否登录。
-
创建LoginHandlerInterceptor类
对登录页面进行操作,检测Session的信息,若Session不存在则不予登录
package com.example.fleamarket.config; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginHandlerInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception { Object loginUser = httpServletRequest.getSession().getAttribute("loginUser"); if(loginUser==null) { httpServletRequest.setAttribute("msg", "没有权限,请先登录"); httpServletRequest.getRequestDispatcher("/").forward(httpServletRequest, httpServletResponse); return false; }else return true; } }
-
创建MyMvcConfig类
创建拦截器,除登录页的跳转地址、html页面,其他页面均进行拦截检测Session的值。
package com.example.fleamarket.config; import org.springframework.format.FormatterRegistry; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.stereotype.Controller; import org.springframework.validation.MessageCodesResolver; import org.springframework.validation.Validator; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.method.support.HandlerMethodReturnValueHandler; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.config.annotation.*; import java.util.List; @Controller public class MyMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new com.example.fleamarket.config.LoginHandlerInterceptor()) .addPathPatterns("/**").excludePathPatterns("index","/","/login"); } }