Springboot未登录请求拦截器实现

Springboot未登录请求拦截器实现

之前用过struts2的同学了解,未登录请求拦截可以通过自定义Interceptor实现,
在springboot项目中也有对应的解决方案:

  1. 自定义Interceptor extends HandlerInterceptorAdapter,重写preHandle方法
  2. 自定义WebMvcConfig实现WebMvcConfigurer接口, 实现addInterceptors方法,添加自定义的拦截器即可**

下面我们来看下具体实现

LoginHandlerInterceptor实现代码
本文承接个人上篇博客中的统一异常处理的方式来处理未登录返回信息的 https://blog.csdn.net/u014229347/article/details/93183143

/**
 * 

@filename LoginInterceptor

*

*

@description 登录拦截器

* * @author llspace * @version 1.0 * @since 2019/6/21 10:34 **/ @Component public class LoginHandlerInterceptor extends HandlerInterceptorAdapter { @Autowired private UserService userService; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if(handler instanceof HandlerMethod){ String method = ((HandlerMethod) handler).getMethod().getName(); if("doLogin".equals(method)){ return true; } //登录判断 User user = getUser(request, response); if(user == null){ //未登录 render(response, CodeMsg.NOT_LOGIN); return false; } //将用户信息设置到UserContext,便于后续使用 UserContext.setUser(user); } return true; } private User getUser(HttpServletRequest request, HttpServletResponse response) { //根据系统不同,系统用来管理session的方式也不相同,所以此处获取user信息的方法就不具体展开实现了 //本人是采用token+redis存储的方式来实现管理的,所以此处是通过token去redis中getUser即可 } private void render(HttpServletResponse response, CodeMsg codeMsg)throws Exception { response.setContentType("application/json;charset=UTF-8"); OutputStream out = response.getOutputStream(); String str = JSON.toJSONString(Result.error(codeMsg)); out.write(str.getBytes("UTF-8")); out.flush(); out.close(); } }

WebMvcConfig 实现代码

/**
 * 

@filename WebMvcConfig

*

*

@description Spring MVC配置类

* * @author llspace * @version 1.0 * @since 2019/6/19 17:11 **/ @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Autowired private LoginHandlerInterceptor loginHandlerInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(loginHandlerInterceptor); } }

以上实现均为个人思路,仅供参考, 欢迎一起学习交流

你可能感兴趣的:(spring,boot)