登录拦截器

拦截器类编写

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.he.blogapi.pojo.SysUser;
import com.he.blogapi.service.LoginService;
import com.he.blogapi.vo.ErrorCode;
import com.he.blogapi.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;

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

@Component
public class LoginInterceptor implements HandlerInterceptor {

    @Autowired
    private LoginService loginService;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //在执行controller方法(handler)之前进行执行
        /**
         *1、需要判断 请求的接口路径  是否为HandlerMethod(controller)
         *2、判断token是否为空,如果为空  未登录
         *3、如果token 不为空,登录验证 loginService checkToken
         *4、如果认证成功 放行即可
         */
        if (!(handler instanceof HandlerMethod)){
            //handler  可能是 RequestResourceHandler  访问资源的handler
            //springboot 程序 访问静态资源 默认去classpath下的static目录去查询
            //如果是访问资源的handler则放行
            return true;
        }

        String token = request.getHeader("Authorization");
        if(StringUtils.isBlank(token)){
            Result fail = Result.fail(ErrorCode.NO_LOGIN.getCode(), ErrorCode.NO_LOGIN.getMsg());
            response.setContentType("application/json;charset=utf-8");
            response.getWriter().print(JSON.toJSONString(fail));
            return false;
        }

        SysUser sysUser = loginService.checkToken(token);
        if (sysUser == null){
            Result fail = Result.fail(ErrorCode.NO_LOGIN.getCode(), ErrorCode.NO_LOGIN.getMsg());
            response.setContentType("application/json;charset=utf-8");
            response.getWriter().print(JSON.toJSONString(fail));
            return false;
        }
        //登录验证成功;放行
        return true;
    }
}

 

拦截器设置

import com.he.blogapi.handler.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Autowired
    private LoginInterceptor loginInterceptor;
  
  #跨域配置 @Override
public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**").allowedOrigins("http://localhost:8080"); }
   #拦截器配置 @Override
public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(loginInterceptor).addPathPatterns("/test"); } }

 

posted @ 2022-09-12 13:56  Homnay  阅读(32)  评论(0)    收藏  举报