springboot 拦截器
在 Spring Boot 项目中,使用拦截器功能通常需要以下 3 步:
定义拦截器;
注册拦截器;
指定拦截规则(如果是拦截所有,静态资源也会被拦截)。
第一步:自定义拦截器
package com.cy.store.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginInterceptor implements HandlerInterceptor {
/**
* 检测全局session对象中是否有uid数据,如果有则放行,如果没有重定向到登录页面
* @param request 请求对象
* @param response 响应对象
* @param handler 处理器(url+controllor:映射)
* @return 如果返回值true 放行 如果是false则表示拦截,重定向到登录页面
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
// HttpServletRequest对象获取session对象
Object obj = request.getSession().getAttribute("uid");
if(obj == null){
//说明用户没有登录过系统,则重定向到login.html页面
response.sendRedirect("/web/login.html");
//结束后续的调用
return false;
}
// 请求放行
return true;
}
}
第二步:注册拦截器(需要@Configuration注解,自动注入,否则不生效)
package com.cy.store.config;
import com.cy.store.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class LoginInterceptorConfigurer implements WebMvcConfigurer {
// 将自定义拦截器注册
@Override
public void addInterceptors(InterceptorRegistry registry) {
HandlerInterceptor interceptor = new LoginInterceptor();
registry.addInterceptor(interceptor) .addPathPatterns("/**")
}
}
第三步:指定拦截规则
package com.cy.store.config;
import com.cy.store.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class LoginInterceptorConfigurer implements WebMvcConfigurer {
// 将自定义拦截器注册
@Override
public void addInterceptors(InterceptorRegistry registry) {
HandlerInterceptor interceptor = new LoginInterceptor();
//配置白名单,存到一个集合中
List<String> patterns = new ArrayList<>();
patterns.add("/bootstrap3/**");
patterns.add("/css/**");
patterns.add("/images/**");
patterns.add("/js/**");
patterns.add("/web/register.html");
patterns.add("/web/login.html");
patterns.add("/web/index.html");
patterns.add("/web/product.html");
patterns.add("/users/reg");
patterns.add("/users/login");
registry.addInterceptor(interceptor)
.addPathPatterns("/**") // 拦击所有
.excludePathPatterns(patterns); //排除参数外的都拦截
}
}
项目目录
