1.Filter过滤器
@Component
public class AuthFilter implements Filter {
private static final Log log = LogFactory.getLog(AuthFilter.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("AuthFilter init OK...");
} @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
log.info("AuthFilter dofilter loading...");
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
request.setCharacterEncoding("UTF-8");
//1.获取用户登录信息,没有登录 去登录页面request.getRequestDispatcher("/login").forward(request, response);
//2.获取用户访问资源,如果是登录和springlogo的请求,则放行
String requestURI = request.getRequestURI();
if(requestURI.equals("/login")||requestURI.equals("/favicon.ico")){
log.info("this is a login request or spring.logo,not filter");
setCrosHeader(response);
filterChain.doFilter(request, response);
return;
}
log.info("user request uri is "+requestURI); //3.获取该uri所需的权限,如果该url不需要权限,则过滤结束
String auth = null;
if(StringUtils.isEmpty(auth)){
log.info("url auth is null");
setCrosHeader(response);
filterChain.doFilter(request, response);
return;
}
//4.判断该用户是否拥有权限,如果没有
//request.setAttribute("message", "对不起,您没有权限,请联系管理员!!!");
//request.getRequestDispatcher("/message").forward(request, response);
//return;
//或使用:
//returnNone(response,"000000", "没有访问权限或请求失败");
//5.如果有权限,则放行
//filterChain.doFilter(request, response);
}
@Override
public void destroy() {
log.info("AuthFilter destory Ok...");
} //设置响应头放行的
private void setCrosHeader(HttpServletResponse response){
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods",
"POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
response.setCharacterEncoding("utf-8");
}
//设置过滤后的响应头
private void returnNone(HttpServletResponse response, String code,
String msg) throws IOException { setCrosHeader(response);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.setHeader("Cache-Control", "no-cache");
PrintWriter writer = response.getWriter();
writer.write(JSONObject.toJSONString(ResultPageInfoJsonUtils.getFailedJson(code,msg)));
writer.flush();
writer.close();
return;
}
}
写一个config类:
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean filterRegistrationBean(AuthFilter authFilter){
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(authFilter);
List<String> auths = Lists.newArrayList();
auths.add("/*");//过滤的路径
filterRegistrationBean.setUrlPatterns(auths);
     filterRegistrationBean.setOrder(1);//如果有多个filter,可以设置filter的执行顺序
        return filterRegistrationBean;
}
}
2.HandlerInterceptor(implements) 和 HandlerInterceptorAdapter(extends)拦截器
拦截器逻辑 
public class AuthInterceptor extends HandlerInterceptorAdapter {
private static final Log log = LogFactory.getLog(AuthInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (request.getParameterMap().containsKey("hello")) {
return true;
}
return false;
}
}
创建拦截器的配置
@Component
public class InterceptorConfig extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 多个拦截器组成一个拦截器链
// addPathPatterns 用于添加拦截规则
// excludePathPatterns 用户排除拦截
InterceptorRegistration interceptorRegistration = registry.addInterceptor(new AuthInterceptor());
interceptorRegistration.addPathPatterns("/*");
interceptorRegistration.excludePathPatterns("/livestock");
super.addInterceptors(registry);
}
}
 

Filter和Interceptor的执行顺序


过滤前-拦截前-action执行-拦截后-过滤后

												

springboot使用过滤器和拦截器的更多相关文章

  1. springboot(五)过滤器和拦截器

    前言 过滤器和拦截器二者都是AOP编程思想的提现,都能实现诸如权限检查.日志记录等.二者有一定的相似之处,不同的地方在于: Filter是servlet规范,只能用在Web程序中,而拦截器是Sprin ...

  2. SpringBoot(十一)过滤器和拦截器

    v博客前言 在做web开发的时候,过滤器(Filter)和拦截器(Interceptor)很常见,通俗的讲,过滤器可以简单理解为“取你所想取”,忽视掉那些你不想要的东西:拦截器可以简单理解为“拒你所想 ...

  3. springboot配置过滤器和拦截器

    import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.Http ...

  4. 关于springboot中过滤器和拦截器

    在解决跨域问题中,发现拦截器和过滤器用得不是熟练.就参考了下一下两个作者的文档.希望大家也可以汲取精华 文档1   https://blog.csdn.net/moonpure/article/det ...

  5. springboot中过滤器、拦截器、切片使用

    直接贴代码:采用maven工程 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project ...

  6. springBoot之配置文件的读取以及过滤器和拦截器的使用

    前言 在之前的学习springBoot中,成功的实现了Restful风格的基本服务.但是想将之前的工程作为一个项目来说,那些是仅仅不够的.可能还需要获取自定义的配置以及添加过滤器和拦截器.至于为什么将 ...

  7. springboot配置监听器、过滤器和拦截器

    监听器:listener是servlet规范中定义的一种特殊类.用于监听servletContext.HttpSession和servletRequest等域对象的创建和销毁事件.监听域对象的属性发生 ...

  8. springboot环境下配置过滤器和拦截器

    以前我们在配置过滤器和拦截器的时候,都是一个类继承一个接口,然后在xml中配置一下就ok 但是,但是,这是springboot的环境,没有xml的配置.所以我们还要继续学习啊啊啊啊啊~~~~~ 先简单 ...

  9. SpringBoot入坑指南之六:使用过滤器或拦截器

    在Web应用中,常常存在拦截全部或部分请求进行统一处理的应用场景,如权限校验.参数校验.性能监控等. 在SpringMVC框架中,我们可以通过过滤器或拦截器实现相关功能,spring-boot-sta ...

随机推荐

  1. 解析Monte-Carlo算法(基本原理,理论基础,应用实践)

    引言 最近在和同学讨论研究Six Sigma(六西格玛)软件开发方法及CMMI相关问题时,遇到了需要使用Monte-Carlo算法模拟分布未知的多元一次概率密度分布问题.于是花了几天时间,通过查询相关 ...

  2. bzoj 4032 [ HEOI 2015 ] 最短不公共子串 —— 后缀自动机+序列自动机

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4032 序列自动机其实就是每个位置记录一下某字母后面第一个出现位置,为了子序列能尽量长. 对字 ...

  3. tyvj1659救援队——最小生成树

    题目:http://www.joyoi.cn/problem/tyvj-1659 想清楚了是非常简单的最小生成树: 1.树中每条边都会被走两边: 2.每个点会走度数遍,起点又多走一遍: 根据以上两条处 ...

  4. PowerShell 总结

    PowerShell 总结 1. 2. 3. 参考学习资料 (1). PowerShell 在线教程 (2). 利用Powershell在IIS上自动化部署网站 视频教程: (3). Windows ...

  5. cocos2dx 获取精灵的高亮效果

    转自:http://blog.csdn.net/tyxkzzf/article/details/38703883 CCSprite* getHighlightSprite(CCSprite* norm ...

  6. Spring boot 学习 四:spring boot 配置文件 application.yml

    一 关于端口: spring boot的默认端口是8080, 如果想更改的话,在配置文件中做如下配置.ServerProperties.class会去读取这个值. server: port: 另外一种 ...

  7. python2 + selenium + eclipse 中,通过django生产数据库表的时候报错

    python2 + selenium + eclipse 中,通过django生产数据库表的时候报错 解决: 1.查看自己电脑中,“开始-->控制面板-->管理工具-->服务--&g ...

  8. YOLO3训练widerface数据集

    因为YOLO3速度精度都很棒,所以想训练一下人脸模型,废话不多,进入正题 1写所有的配置文件 1.1 YOLO3-face.cfg 个人感觉YOLO的配置文件骑士和caffe差不多 在cfg/YOLO ...

  9. 在GitHub上上传项目(转载)

    今天准备在GitHub第一次上传自己的项目,发现过程并不是太简单,在网上找了一个博客,写的很详细,结合着他的讲解成功上传了自己的项目. 结合着他的步骤和自己遇到的问题,做一个梳理,以便以后使用.(原博 ...

  10. Mac下安装rJava,xlsx,ReporteRs包

    xlsx包可以用来读取excel数据,ReporteRs包可以用来直接输出word报告,这两个包都对rJava包有依赖,所以必须先安装rJava. (1)查看mac的java信息 java版本: &g ...