从零开始学习SpringBoot我爱编程

SpringBoot - Web开发 拦截器

2018-05-16  本文已影响71人  BzCoder

在做网站的时候,很多页面希望用户在登录后才能访问,此时我们就要为我们的Web项目添加登录拦截器,拦截器其实是一种AOP编程思想的体现,这是在之前的安卓开发中接触比较少的一块内容。好,接下来看一下如何实现在SpringBoot中添加登录拦截器。

一.定义拦截器

/**
 * 登录拦截器
 * @author BaoZhou
 * @date 2018/5/16
 */
public class LoginHandlerInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String username = (String) request.getSession().getAttribute("username");
        if (StringUtils.isEmpty(username)) {
            request.setAttribute("msg", "请先登录");
            request.getRequestDispatcher("/index").forward(request,response);
            return false;
        } else {
            return true;
        }
    }
    }
}

此拦截器的功能就是根据Session来中的username字段来判断用户是否登录。

二.配置拦截器

在Config文件中配置拦截器

 /**
     * 拦截器
     *
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginHandlerInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/", "/index", "/user/login");
    }

这个配置的意思就是让这个拦截器在所有的页面生效除了(("/", "/index", "/user/login"))这三个路径。

三.运行

运行正确

此时我们请求dashboard页面时,请求被拦截器截获,返回登录页面并提示消息。

但是中间还是碰到了一个坑反复研究没有解决。按照道理来说SpringBoot的自动配置让拦截器不会拦截静态资源,但是在登录界面中我们引入的本地Bootstrap却被拦截了。。。。。。。

    <link th:href="@{/dist/css/bootstrap.min.css}" rel="stylesheet">``
Bootstrap被拦截,CSS无法获取

后将Bootstrap引入语句改为下面这句才通过。

  <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/4.4.1/css/bootstrap.min.css">

反复检查,资源存放路径也不存在问题。


静态资源路径

最后也没有找到具体原因,SpringBoot版本2.0.1.RELEASE,如果有大神知道原因所在并解答,那必万分感激!

上一篇下一篇

猜你喜欢

热点阅读