在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中的使用。
网友评论