自己尝试使用spring boot的Interceptor拦截器(Interceptor和WebMvcConfigurer)来制作一个完整的后台登录和未登录就引导到登录页的实例:
目录结构:
![a04fa4bffde4be883dead31262d2173f.png](https://img-blog.csdnimg.cn/img_convert/a04fa4bffde4be883dead31262d2173f.png)
yml配置
server: port: 8081spring: datasource: url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC password: username: root driver-class-name: com.mysql.cj.jdbc.Drivermybatis: type-aliases-package: com.ken.springlogin.entity mapper-locations: classpath:mapping/*Mapping.xmllogging: level: root: info com.ken.springlogin: debug
config.WebConfig.java
@Configurationpublic class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { System.out.println("webconfig"); registry.addInterceptor(new LoginInterceptor()) .addPathPatterns("/admin/**") .excludePathPatterns("/admin/login_show") .excludePathPatterns("/admin/login_submit"); }}
controller.AdminController.java
package com.ken.springlogin.controller;import com.ken.springlogin.entity.Users;import com.ken.springlogin.service.IUsersService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.http.HttpRequest;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;@Controller@RequestMapping("/admin")public class AdminController { @Autowired private IUsersService usersService; @RequestMapping("/login_show") public String login_show() { return "/admin/login"; } @RequestMapping("/login_submit") public String login_submit(Users users, Model model, HttpSession session) { Users u = usersService.find(users); System.out.println(u); if(u == null) { model.addAttribute("err", "用户名或密码错误"); return "/admin/login"; } session.setAttribute("user", u.getUser_name()); return "redirect:/admin/index"; } @RequestMapping("/index") public String index(Model model, HttpSession session, HttpServletRequest request) { model.addAttribute("username", request.getSession().getAttribute("user")); return "/admin/index"; } @RequestMapping("/logout") public String logout(HttpSession session) { session.removeAttribute("user"); return "redirect:/admin/login_show"; }}
entity.Users.java
public class Users { private Integer user_id; private String user_name; private String user_pwd; private Integer flag;
省略了更多的get、set和toString方法。
interceptor.LoginInterceptor.java
public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("url:" + request.getRequestURL() + " | " + request.getRequestURI()); Object obj = request.getSession().getAttribute("user"); System.out.println(obj); if(request.getSession().getAttribute("user") == null) { response.sendRedirect("/admin/login_show"); return false; } return true; }}
mapper.UsersMapper.java
public interface UsersMapper { Users find(Users users);}
service.IUsersService.java
public interface IUsersService { Users find(Users users);}
service.impl.UsersServiceImpl.java
@Servicepublic class UsersServiceImpl implements IUsersService { @Autowired private UsersMapper usersMapper; @Override public Users find(Users users) { String pwd = users.getUser_pwd(); System.out.println(pwd); if(pwd != "") { pwd = MD5Utils.code(pwd); users.setUser_pwd(pwd); } System.out.println(users); return usersMapper.find(users); }}
util.MD5Util.java
public class MD5Utils { public static String code(String str) { try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(str.getBytes()); byte[]byteDigest = md.digest(); int i; StringBuffer buf = new StringBuffer(""); for (int offset = 0; offset < byteDigest.length; offset++) { i = byteDigest[offset]; if (i < 0) i += 256; if (i < 16) buf.append("0"); buf.append(Integer.toHexString(i)); } //32位加密 return buf.toString(); // 16位的加密 //return buf.toString().substring(8, 24); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return null; } } public static void main(String[] args) { System.out.println(code("111111")); }}
resources.mapping.UsersMappingxml
<?xml version="1.0" encoding="UTF-8"?> SELECT * FROM yy_users WHERE user_name = #{user_name} AND user_pwd = #{user_pwd}
模板:
templates.admin.login.html
登录
login
user pwd
templates.admin.index.html
后台首页
管理后台
欢迎您:!退出
亲自手写完整个代码,完整运行都OK的。使用的是spring boot+mybatis+thymeleaf开发的。
完整代码,如果有需要的,可以私信我!