springboot 拦截器_springboot使用拦截器Interceptor开发登录

自己尝试使用spring boot的Interceptor拦截器(Interceptor和WebMvcConfigurer)来制作一个完整的后台登录和未登录就引导到登录页的实例:

目录结构:

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开发的。

完整代码,如果有需要的,可以私信我!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值