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. 关于Django ORM filter方法小结

    django filter是一个过滤器,相当于SQL的select * from where. filter返回一个QuerySet对象,还可以在该对象上继续进行django orm 该有的操作. 有 ...

  2. mysql数据库---编码格式基本操作

    1.查看数据库编码格式 mysql> show variables like 'character_set_database'; 2.查看数据表的编码格式 mysql> show crea ...

  3. PowerShell自动部署网站—(2)、安装.Net Framework

    #$PSScriptRoot = "D:\Website":$PSScriptRoot 用于获取执行脚本所在的目录,但是PowerShell 2.0 不支持,需要人为赋值成绝对路径 ...

  4. python的logging模块详细使用demo

    import logging import os from logging import handlers from datetime import datetime class MyLog(): d ...

  5. hdu1853 Cyclic Tour (二分图匹配KM)

    Cyclic Tour Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/65535 K (Java/Others)Total ...

  6. Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1

    Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1 这个问题,原因是UTF-8编码有可能是两个.三个.四个字节.Emoji表 ...

  7. 5.zip隐写术

    首先分析pcapng,来得到flag. 先亮出下载地址:http://ctf5.shiyanbar.com/misc/LOL/LOL.pcapng 由于这是.pcapng,需要下载 wireshark ...

  8. 懒人模式开启Android模块自动化Api之旅

    推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 在将业务进行模块化时,避免不了模块页面路由和模块通信, 大多数我 ...

  9. WSAStartup()函数的使用

    int WSAStartup( __in WORD wVersionRequested, __out LPWSADATA lpWSAData ); WSAStartup 格  式: int PASCA ...

  10. [开发技巧]·TensorFlow&Keras GPU使用技巧

    [开发技巧]·TensorFlow&Keras GPU使用技巧 ​ 1.问题描述 在使用TensorFlow&Keras通过GPU进行加速训练时,有时在训练一个任务的时候需要去测试结果 ...