springboot使用过滤器和拦截器
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使用过滤器和拦截器的更多相关文章
- springboot(五)过滤器和拦截器
前言 过滤器和拦截器二者都是AOP编程思想的提现,都能实现诸如权限检查.日志记录等.二者有一定的相似之处,不同的地方在于: Filter是servlet规范,只能用在Web程序中,而拦截器是Sprin ...
- SpringBoot(十一)过滤器和拦截器
v博客前言 在做web开发的时候,过滤器(Filter)和拦截器(Interceptor)很常见,通俗的讲,过滤器可以简单理解为“取你所想取”,忽视掉那些你不想要的东西:拦截器可以简单理解为“拒你所想 ...
- springboot配置过滤器和拦截器
import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.Http ...
- 关于springboot中过滤器和拦截器
在解决跨域问题中,发现拦截器和过滤器用得不是熟练.就参考了下一下两个作者的文档.希望大家也可以汲取精华 文档1 https://blog.csdn.net/moonpure/article/det ...
- springboot中过滤器、拦截器、切片使用
直接贴代码:采用maven工程 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project ...
- springBoot之配置文件的读取以及过滤器和拦截器的使用
前言 在之前的学习springBoot中,成功的实现了Restful风格的基本服务.但是想将之前的工程作为一个项目来说,那些是仅仅不够的.可能还需要获取自定义的配置以及添加过滤器和拦截器.至于为什么将 ...
- springboot配置监听器、过滤器和拦截器
监听器:listener是servlet规范中定义的一种特殊类.用于监听servletContext.HttpSession和servletRequest等域对象的创建和销毁事件.监听域对象的属性发生 ...
- springboot环境下配置过滤器和拦截器
以前我们在配置过滤器和拦截器的时候,都是一个类继承一个接口,然后在xml中配置一下就ok 但是,但是,这是springboot的环境,没有xml的配置.所以我们还要继续学习啊啊啊啊啊~~~~~ 先简单 ...
- SpringBoot入坑指南之六:使用过滤器或拦截器
在Web应用中,常常存在拦截全部或部分请求进行统一处理的应用场景,如权限校验.参数校验.性能监控等. 在SpringMVC框架中,我们可以通过过滤器或拦截器实现相关功能,spring-boot-sta ...
随机推荐
- ie下的布局(layout)和拥有布局(hasLayout)
我们都知道ie浏览器和其他一些浏览器有很多表现不同的地方,这确实让人头疼,ie的表现与其他浏览器不同的原因之一就是我们今天要说的这个熟悉又陌生的东西:layout是一个专门针对显示引擎内部工作方式的概 ...
- AR/VR-VR-Info-Micron-Insight:一镜观一屋:VR 将建筑设计变为现实
ylbtech-AR/VR-VR-Info-Micron-Insight:一镜观一屋:VR 将建筑设计变为现实 1.返回顶部 1. 一镜观一屋:VR 将建筑设计变为现实 想象一下,在一栋为你设计的还没 ...
- MySql介绍及优化(1)
mysql 数据库 1.是关系型数据库: 2.体积小.支持多处理器.开源.免费 3.在 Internet 中小型网站中的使用率尤其高 mysql 数据库开发常见问题及优化 一.库表设计 1.1 引擎选 ...
- chromium浏览器开发系列第四篇:如何调试最新chromium
接二连三的事情,时间比较紧张,但是还是没有把这个系列的文章丢掉,因为这也是对自己知识的总结吧.提倡大家多写写,以后再看的时候会有种莫名的小激动. 上周写的是chromium的目录结构,好像大家不太感兴 ...
- 0003_Linux基础之常用命令
1.pwd:查看当前所在目录 2.cd :切换目录 3.ls:查看当前目录下的文件及文件夹: 4.ls -l :列出当前目录下文件及详细信息 drwxr-xr-x 第一个字符为d则 ...
- Windows下怎样安装Tomcat
Tomcat 是开源的WEB应用容器,所以受到各位程序员和公司的亲赖.在这里给大家介绍一下如何在Windows环境下安装Tomcat绿色版本,希望能够对大家有帮助. 1.首先去Tomcat官网下载To ...
- Laravel框架接入短信平台进行用户注册短信验证
今天刚接触了一个短信接口平台,云通讯第三方短信提供服务商.http://www.yuntongxun.com/ 然后介绍一下怎么使用该短信平台来接入到自己的项目中. 首先你的去注册一个账号,然后根据提 ...
- 如何获取AppStore上应用的ipa安装包
1.首先你得去下载一个Apple Configurator 2,我们通过这个工具来获取ipa包,从AppStore上下载安装你需要获取的App 2.连接手机,打开Apple Configurator ...
- jdbcTemplate简单使用
package com.bizvane.spider.tools; import org.apache.commons.dbcp.BasicDataSource; import org.springf ...
- mysql由浅入深探究(三)----mysql增删改查
通过前两节的学习,目前我们已经完成了数据库的安装,用户的创建及权限操作等相关操作,但是我们似乎我们只是隐隐约约接触到了数据库的一些基本操作,对数据库表还是比较陌生.那么现在我们呢开始了解一些数据库的一 ...