zoukankan      html  css  js  c++  java
  • java spring boot 拦截器 实现未登录用户不能登录

    java spring boot  拦截器 实现未登录用户不能登录

    拦截器可以理解为PHP的前置控制器  运行控制器前的触发

    1 先创建个拦截器

    package com.example.demo212;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    import cn.hutool.json.JSONObject;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.PrintWriter;
    
    public class MyInterceptor implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            if (request.getSession().getAttribute("user") == null) {
                response.setCharacterEncoding("UTF-8");
                response.setContentType("application/json; charset=utf-8");
                PrintWriter out = null;
                try {
                    JSONObject res = new JSONObject();
                    res.put("success", false);
                    res.put("message", "用户未登录!");
                    out = response.getWriter();
                    out.append(res.toString());
                    return false;
                } catch (Exception e) {
                    e.printStackTrace();
                    response.sendError(500);
                    return false;
                }
            }
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    
        }
    }

    2 写拦截器配置

    package com.example.demo212;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    @Configuration
    public class InterceptorConfig implements WebMvcConfigurer {
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            // 注册拦截器
            InterceptorRegistration ir = registry.addInterceptor(new MyInterceptor());
            // 添加拦截请求
            ir.addPathPatterns("/*");
            // 添加不拦截的请求
            ir.excludePathPatterns("/login");
    
            // 以上三句代码可以使用下面的代替
            // registry.addInterceptor(new MyInterceptor()).addPathPatterns("/*").excludePathPatterns("/login");
        }
    }
    package com.example.demo212;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.validation.annotation.Validated;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.validation.constraints.*;
    
    
    @SpringBootApplication
    @RestController
    @Validated
    public class Demo212Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Demo212Application.class, args);
        }
        @RequestMapping("/getUser")
        public String getUserStr(String name, Integer age) {
            return "name: " + name + " ,age:" + age;
        }
        @GetMapping("/login")
        public String Login(){
            return "login";
        }
    
        @GetMapping("/add")
        public String add(){
            return "add";
        }
    }

    运行http://localhost:8080/add

    显示

    {"message":"用户未登录!","success":false}
  • 相关阅读:
    js中当call或者apply传入的第一个参数是null/undefined时,js函数内执行的上下文环境是什么?
    闭包的实现原理和作用以及堆栈溢出和内存泄漏原理和相应解决办法
    JavaScript的作用域和作用域链
    词法作用域和动态作用域
    理解 es6 中class构造以及继承的底层实现原理
    new一个对象的详细过程,手动实现一个 new操作符
    实现继承的几种方式以及他们的优缺点
    理解JavaScript的执行上下文栈,可以应用堆栈信息快速定位问题
    原型和原型链-instanceof的底层实现原理
    js判断变量未定义
  • 原文地址:https://www.cnblogs.com/newmiracle/p/12769748.html
Copyright © 2011-2022 走看看