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. js将时间转换为时间戳

    转自http://zhidao.baidu.com/link?url=jwmRLUKIC92fNeS1l8PuZltmZIN--LJFtKd9G6SYEjFfCu_pFGyXsh54txzv22E0g ...

  2. 程序设计中的计算复用(Computational Reuse)

    从斐波那契数列说起 我想几乎每一个程序员对斐波那契(Fibonacci)数列都不会陌生,在很多教科书或文章中涉及到递归或计算复杂性的地方都会将计算斐波那契数列的程序作为经典示例.如果现在让你以最快的速 ...

  3. 洛谷P1352——动规

    题目:https://www.luogu.org/problemnew/show/P1352 代码如下: #include<iostream> #include<cstdio> ...

  4. 在visualstudio中使用Qt

    1.  说明 在此说明一下IDE跟封装的之间的关系,他们之间本质上来说没有关系,是可以多对对的关系. Qt开发是个比较泛的概念,Qt是由很多一系列类组成的整体,就像boost里面也有很多的类,而boo ...

  5. 三 Flask+ MySQL 数据库操作

    一: __init__.py作用: __init__.py 文件的作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有__init__.py 文件.通常__init__.py ...

  6. ng2自定义管道

    一.管道的作用及本质 作用:数据处理 本质:公用的方法 二.定义管道组件 //summary.pipe.tsimport { Pipe, PipeTransform } from '@angular/ ...

  7. PDF,IMAGE,HTML,WORD,EXCEL 互操作

    http://www.cnblogs.com/lyl6796910/p/3318056.html

  8. [提高班] 2017 Summer Training Day1补题

    题目地址:https://vjudge.net/contest/175939#overview A.数据范围是10^9,所以需要一个巧思路.对于一个数n,如何去判定比它的所有数是否是二进制形式.比n小 ...

  9. iView之DatePicker的datetimerange校验

    使用DatePicker的type是datetimerange时,处理开始--结束的持续时间校验如下.遇到的问题:时间弹出校验提示,但是程序还是会继续往下走,所以调完校验后,再做判断开始时间是否为tr ...

  10. POJ-2229

    Sumsets Time Limit: 2000MS   Memory Limit: 200000K Total Submissions: 19599   Accepted: 7651 Descrip ...