** ## - [ ] springboot配置拦截器 **
想拿高薪吗?想摆脱那些生瓜们写的稀烂的项目吗?,从写日记开始。积累就是高薪,进步就是高薪。你还在等什么?让我们一起来学习springboot吧!
在学习springboot框架时候,不可避免的需要学习拦截器还有过滤器。很多小伙伴不知道这两个东西什么场景下使用。我简单的介绍一下。
-
拦截器:Interceptor 在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。比如日志,安全等。例如在写微信公众号项目的时候,用户每次打开公众号都判断用户是否已经登录,而且用户在进入公众号内的大部分操作,都需要绑定到这个用户。那么在这些场景下就可以用到拦截器。
-
过滤器:Filter是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
先看一下项目工程目录
好了我来看代码:
- 先把拦截器配置代码看一下
package com.springbootMybatis.common.interceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
- 拦截器配置
- @Author:
- @Description:
- @Date:Create in 17:35 2018/3/12
- @Modified By:
/
@Configuration
public class WebAppConfig extends WebMvcConfigurerAdapter {
/*- 注册 拦截器
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 设置拦截的路径、不拦截的路径、优先级等等
registry.addInterceptor(new SessionInterceptor())
.addPathPatterns("/**");
}
}
addPatjPatterns(String patterns)方法中写的拦截路径,excludePathPatterns(String patterns)方法是非拦截路径。
- 注册 拦截器
- 写拦截工具类 SessionInterceptor.java,对拦截的地址进行自定义操作
package com.springbootMybatis.common.interceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;
/**
-
拦截器
-
@Author:
-
@Description:
-
@Date:Create in 17:02 2018/3/12
-
@Modified By:
*/
public class SessionInterceptor implements HandlerInterceptor {
//日志
private Logger logger = LoggerFactory.getLogger(this.getClass());Map<String, Object> map = new HashMap();
//进入拦截器后再次进行拦截
private static final String[] IGNORE_URI = {"/login"};@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println(“开始请求地址拦截”);
HttpSession session = request.getSession(false);
boolean flag = false;
String url = (request.getRequestURL() + “?” + request.getQueryString())
.toString();
System.out.println(">>>1:" + url);
this.logger.info(“请求,url{}:”,url);
for (String s : IGNORE_URI) {
if (url.contains(s)) {
flag = true;
break;
}
}
this.logger.info("url>>>2: " + url);
//
if (!flag) {
if ((request.getHeader(“x-requested-with”) != null)
&& (request.getHeader(“x-requested-with”)
.equalsIgnoreCase(“XMLHttpRequest”))) {
this.logger.info(“ajax – 进入—>>>”);
this.map.put(“rs_code”, Integer.valueOf(1005));
response.getWriter().write(JSON.toJSONString(this.map));
} else {
this.logger.info(“不是ajax – 进入—>>>”);
response.sendRedirect(“http://www.baidu.com”);//填写重定向的地址,可以本项目的接口地址:http://localhost/demo/test,也可以是第三方地址:http://www.baidu.com
}
}
this.logger.info(“最终 111flag==” + flag + “进图判断获取用户信息”);
return flag;
}@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println(“返回视图或String之前的处理”);
}@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println(“返回视图或String之前的处理”);
}
}
自定义的代码讲解我就不说了,自己建个项目,debug跑一下,一步一步看就知道啦!
老弟是新手,进来的老铁点个赞,如果哪里写的不好的也请老铁指出来!
下一章 :springboot 配置Servlet+过滤器