拦截器-登录验证和静态资源白名单

HandlerInterceptor:

此类中有三个方法
    1.preHandle()         -- 处理程序执行之前的拦截点。
    2.postHandle()        -- 成功执行处理程序后的拦截点。
    3.afterCompletion() -- 请求处理完成后的回调,即渲染视图后。

如下简单写法

配置类

/**
 * title 登录验证
 */
public class LoginInterceptor implements HandlerInterceptor {

    /**
     *  title 处理程序执行之前的拦截点
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 登录验证处
        HttpSession session = request.getSession();
        Object userInfo = session.getAttribute("userInfo");
        if(userInfo != null){
            // 放行
            return true;
        }
        // 不放行 说明没有登录 跳转到登录页面
        response.sendRedirect("/");
        return false;
    }

    /**
     *  title 成功执行处理程序后的拦截点
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    /**
     *  title 请求处理完成后的回调,即渲染视图后
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 可以处理一些preHandle用到的一些工具,clear、remove 关闭一些io、删除一些缓存或者删除线程池中的内容
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}
@Component
public class MyConfig implements WebMvcConfigurer{

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                // 默认拦截所有请求
                .addPathPatterns("/**")
                // excludePathPatterns 放行哪些
                .excludePathPatterns("/login","/","/loginSystem")
                // 可以分开写 下面是静态资源放行
                .excludePathPatterns("/css/**","/js/**");
    }

}
@Controller
public class MyController {

    @ResponseBody
    @GetMapping("/getUser")
    public User getUser(){
        User user = new User();
        user.setAge(20);
        user.setName("张三");
        return user;
    }

    /**
     * title 去登录页面
     *
     * @param request
     * @return
     */
    @GetMapping(value = {"/","/login"})
    public String login(HttpServletRequest request){
        // 获取session
        HttpSession session = request.getSession();
        // 获取session中登录信息
        Object userInfo = session.getAttribute("userInfo");
        if(userInfo!=null){
            // 登陆过去首页
            return "index";
        }else{
            // 没有登录去登录页面
            return "login";
        }
    }

    /**
     * title 登录操作
     *
     * @param request
     * @return
     */
    @GetMapping("/loginSystem")
    public String system(HttpServletRequest request){
        // 登录操作
        HttpSession session = request.getSession();
        session.setAttribute("userInfo","登录信息");
        return "index";
    }
}
@Data
@ToString
public class User {
    private String name;
    private int age;
}

前台页面

  login页面

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

登录页面

<a th:href="@{/loginSystem}">登录</a>

</body>
</html>

  index页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>欢迎</title>
</head>
<body>
<h1>欢迎光临(Controller)</h1>
</body>
</html>

pom文件添加thymeleaf包

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

 

posted @ 2022-08-11 16:40  Dabo丶  阅读(374)  评论(0编辑  收藏  举报