个人随笔
目录
Springboot2.0 添加拦截器
2020-09-11 22:36:17

有时候我们需要对请求进行拦截,比如检查是否登录什么的,所以这里在拦截器里做,后面还要进行权限(就是有些请求需要校验权限的,有些不需要的)拦截,就通过AOP用自定义注解实现。执行顺序是(拦截器—AOP)当然这个在另一篇博文里写啦,拦截器是拦截所有的请求,也可以配置规则排除。

一、拦截器代码

1、主要是实现HandlerInterceptor即可

  1. @Component
  2. public class CoreInterceptor implements HandlerInterceptor{
  3. }

2、然后实现方法:

  1. @Override
  2. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
  3. throws Exception {
  4. }

3、关键逻辑

  1. log.info("进入登录判断拦截器,拦截的链接是:"+request.getRequestURI());
  2. //这个是获取访问类型,若是不为null,就表明是异步,异步值一般都是:XMLHttpRequest
  3. String requestType = request.getHeader("X-Requested-With");
  4. //判断session中是否登录,没有登录就重定向到登录页面
  5. HttpSession session =request.getSession();
  6. //1、判断session中有没有user信息,若是有,则表明用户登录成功,直接转到首页,否则跳转到登录界面
  7. User user = (User) session.getAttribute(Const.USER_KEY);
  8. if(user==null) {
  9. //XMLHttpRequest这个表示异步
  10. if(requestType!=null) {
  11. //如果是异步就返回一个json字符串,页面可以ajax来指定
  12. response.getWriter().write(result);
  13. return false;
  14. }else {
  15. //如果是同步,就直接重定向到登录界面,springboot直接写映射路径即可
  16. response.sendRedirect("login");
  17. }
  18. return false;
  19. }
  20. return true;

二、注册拦截器

1、这个是为了把要排除拦截的内容写在配置文件里(application.yml),如下

  1. intercept:
  2. #登录拦截,放行的路径
  3. excludelogin: ["/css/**","/images/**","/js/**"]

2、实现 WebMvcConfigurer

  1. @Configuration
  2. @ConfigurationProperties(prefix="intercept")
  3. public class InterceptorConfig implements WebMvcConfigurer{
  4. }

3、重写如下方法:

  1. //这个是为了读取配置文件中的数组(要排除拦截的链接)
  2. private ArrayList<String> excludelogin = new ArrayList<String>();
  3. public ArrayList<String> getExcludelogin() {
  4. return excludelogin;
  5. }
  6. public void setExcludelogin(ArrayList<String> excludelogin) {
  7. this.excludelogin = excludelogin;
  8. }
  9. //注入拦截器对象
  10. @Autowired
  11. private CoreInterceptor coreInterceptor;
  12. /**
  13. * 功能描述:
  14. * 配置静态资源,避免静态资源请求被拦截
  15. */
  16. public void addInterceptors(InterceptorRegistry registry) {
  17. //addPathPatterns 用于添加拦截规则
  18. registry.addInterceptor(coreInterceptor)
  19. //排除拦截的选项
  20. .excludePathPatterns(excludelogin.toArray(new String[excludelogin.size()]));
  21. }

因为springboot2.0若是添加了拦截器,默认会拦截所有请求,所以必须排除一些不拦截的请求。

结语

拦截器里一般都是做权限验证,是否登录的,好了,今晚的笔记搞定。:bowtie:

 776

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2