美文网首页
Spring Boot - 拦截器

Spring Boot - 拦截器

作者: yuanzicheng | 来源:发表于2018-04-17 12:25 被阅读48次

在Spring Boot项目中使用Spring MVC拦截器仅需简单2步就能实现。

以下内容以登录拦截器为例,介绍拦截器在Spring Boot中的使用。

Step 1:创建一个登录拦截器,实现HandlerInterceptor接口,在preHandle方法中处理具体的拦截逻辑

import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@Component
public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
        //登录状态
        boolean isLogin = false;
        String token = request.getHeader("token");
        if (!StringUtils.isEmpty(token)) {
            //TODO 通过token验证是否已登录  
        }
        if (isLogin) {
            return true;
        } else {
            response.setCharacterEncoding("utf8");
            PrintWriter out = response.getWriter();
            //Result为自定义的Rest请求响应结果类
            out.print(JSONObject.toJSONString(new Result<>(false, "未登录", null)));
            out.close();
            return false;
        }
    }

}

Step 2:配置Spring MVC拦截器及拦截规则(路径)

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.Collections;

/**
 * SpringMVC拦截器配置
 */
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Autowired
    private LoginInterceptor loginInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //配置已经定义的拦截器,除/login外的所有路径都拦截
        registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns(Collections.singletonList("/login"));
    }
}

注意:在拦截器中无法改变HttpServletRequest对象的值。而我们通常在做登录拦截验证的时候,如果验证已登录往往需要在HttpServletRequest中添加用户信息如uid,这种情况下拦截器就不是最佳选择了。此时可以考虑使用过滤器(下一篇介绍),这里以登录拦截器为例仅仅用作演示拦截器在Spring Boot中的使用。

相关文章

网友评论

      本文标题:Spring Boot - 拦截器

      本文链接:https://www.haomeiwen.com/subject/sbrukftx.html