场景应用:用SpringBoot手写一个登录拦截器

建工程

建工程什么的就不多说了,可以参考我的另一篇博文:https://yangyongli.blog.csdn.net/article/details/126789154

项目目录:
在这里插入图片描述

编写controller

package com.yyl.firstdemo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpSession;

@Controller
@RequestMapping("user")
public class UserController {
    
    
    /**
     * 登录验证
     *
     * @param username
     * @param password
     * @param session
     * @param model
     * @return
     */
    @RequestMapping("login")
    public String login(@RequestParam("username") String username,
                        @RequestParam("password") String password,
                        HttpSession session, Model model) {
    
    
        //模拟数据库查询
        if (username.equals("yangminghui") && password.equals("111")) {
    
    
            session.setAttribute("username", "yangminghui");
            return "redirect:/user/welcome";
        } else {
    
    
            model.addAttribute("msg", "用户名或者密码错误");
            return "login";
        }
    }
    /**
     * 登录的页面
     *
     * @param model
     * @return
     */
    @RequestMapping("login-html")
    public String loginHtml(Model model) {
    
    
        model.addAttribute("msg", "");
        return "login";
    }
    /**
     * 欢迎首页
     *
     * @return
     */
    @RequestMapping("welcome")
    public String welcome() {
    
    
        return "welcome";
    }
}

登录页面与欢迎页面

登录页面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/user/login" method="post">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    <input type="submit" value="登录"><br>
    <span th:if="${msg}!=''" th:text="${msg}"></span>
</form>
</body>
</html>

欢迎页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>
        欢迎欢迎!
    </h1>
    <img src="../test1.jpg">
</body>
</html>

编写登录拦截器

package com.yyl.firstdemo.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginInterceptor implements HandlerInterceptor {
    
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
    
        //获取session
        HttpSession session = request.getSession();
        //判断session总是否存在用户名
        String username = (String) session.getAttribute("username");
        if (username == null) {
    
    //没有登录或者登录过期跳转登录页面
            request.setAttribute("msg", "");
            //重定向到请求/user/login-html
            response.sendRedirect("/user/login-html");
            //返回false,不执行后面的拦截器和Controller对应的方法
            return false;
        }
        //放行
        return true;
    }
}

配置拦截器

package com.yyl.firstdemo.config;

import com.yyl.firstdemo.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class LoginInterceptorConfig implements WebMvcConfigurer {
    
    
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    
    
        registry.addInterceptor(new LoginInterceptor())
                //拦截器要拦截url
                .addPathPatterns("/**")
                //排除拦截器要拦截的url
                .excludePathPatterns("/user/login-html", "/user/login", "/css/**", "/js/**", "/img/**");
    }
}

访问测试

在这里插入图片描述
登录失败:
在这里插入图片描述
登录成功:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45525272/article/details/126819881
今日推荐