springboo自定义过滤器
话不多说,开搞!
1.首先,设置自定义拦截器,继承HandlerInterceptorAdapter,重写preHandle方法,通过就返回出,拦截就返回false
如这个登录拦截(这里是登录的信息存在了reids中,只有登录了才会有相应的信息,没有就判定没有登录):
import com.aiwtc.pf.ticket.constant.Constant;
import com.aiwtc.pf.ticket.util.RedisUtil;
import com.aiwtc.pf.ticket.util.StringUtils;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 前端用户登录拦截,和用户相关的资源需要登录
* @author zeng_
* @date 2018/12/26
*/
public class FrontLoginIntercepter extends HandlerInterceptorAdapter {
/**
* 限制登录用户
* @param request request
* @param response response
* @param handler handler
* @return 限制结果
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//获取缓存中的key,如果没有,则返回登录界面
String ticketKey = (String) RedisUtil.getInstance().get(Constant.WEB_NAME, Constant.LOGIN, Constant.TICKET_KEY);
if(StringUtils.isBlank(ticketKey)){
response.sendRedirect(Constant.TO_LOGIN);
return false;
}
//如果存在,name就是已登录,就允许进行操作,再根据需要ticketKey去缓存中获取商家信息
// RedisUtil.getInstance().get("ticket","login",ticketKey);
return true;
}
}
2.注册自定义过滤器,spring项目一般是在xml文件中注册,这里springboot则是只需要实现WebMvcConfigurer,这个类,然后重写一些方法,即可完成,过滤器配置:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.nio.charset.Charset;
import java.util.List;
/**
* WebConfigurer
* @author zp
*/
@Configuration
public class WebConfigurer implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//用于拦截静态资源
registry.addResourceHandler("/api/doc/**").addResourceLocations("classpath:/swagger/dist/");
}
@Bean
public HttpMessageConverter<String> responseBodyConverter() {
return new StringHttpMessageConverter(Charset.forName("UTF-8"));
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(responseBodyConverter());
}
/**
* 这个方法用来注册拦截器,我们自己写好的拦截器需要通过这里添加注册才能生效
* @param registry 拦截器
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
//拦截所有/api下的用户请求,过滤未登录用户
registry.addInterceptor(new FrontLoginIntercepter()).addPathPatterns("/api/user/*","/admin/api/*","/admin/toIndex","/admin/merchatUpdatePass");
//拦截所有/pay下的用户请求,每个用户每三秒只能调用一次支付接口
registry.addInterceptor(new PayIntercepter()).addPathPatterns("/api/user/pay/*");
}
}
3.总结,在springboot项目中,先继承HandlerInterceptorAdapter,重写preHandle方法,然后在实现,web过滤配置类。WebMvcConfigurer,再在相应的地方完成注册,写好需要过滤的请求即可!
很简单,确很必要的操作,记记!免得下次又模糊啦!哈哈!